As
Strings são um conjunto de caracteres armazenados em um vetor. Diferente de
char,
float,
double e
int, a
string não é um tipo básico de C. Nesse texto, irei mostrar formas de construir e tratar
Strings, usando algumas funções que a
linguagem C oferece. :)
Exemplos de Strings:
"Paulo", "Brasil", "Faculdade de Psicologia", "C".
OBS: Note que para representar um char, eu utilizo aspas simples, enquanto as strings são utilizadas aspas. Por isso "C" é uma string, e 'C' é um char.
Uma coisa importante de entender é como uma string é utilizada. Como uma string é um vetor de caracteres, cada caractere da palavra é colocado em uma posição como se fosse um char. Quando declaramos a carga inicial de um vetor, de forma superior ao número de caracteres utilizados, o compilador colocará automaticamente o caractere '\0' para delimitar a string.
Ex:
char pais[30] = "Brasil";
Ficaria {Brasil+\0}, que da 5+1, utilizando 6 caracteres ao todo.
Outros exemplos:
char nome[30] = "Pedro";
char pais[30] = {'B','R','A','S','I','L'}; // delimitador colocado depois de 'L'
char fruta[] = "tomate";
char *fruta = "tomate"; // igual ao anterior
No caso de fruta, é calculado o número de caracteres da string, sendo add o '\0'.
►I/O de Strings
Existe algumas funções de grande importância para leitura e escrita de strings.
►
Puts
Essa função é utilizada para escrever strings que estejam em
Constantes,
Variáveis, ou simplesmente imprimir uma linha, mudando de linha logo em seguida.
Ex:
puts("IBM");
printf("IBM\n");
As duas expressões irão imprimir, indo em seguida para uma nova linha.
►
Printf
Sua maior importância é melhor empregada na escrita de formato da string, utilizando a formatação.
Ex:
char pais[30] = "Paraguai";
printf("País:
%s", pais);
►
Scanf
É uma função que permite fazer a leitura de apenas
uma palavra na string utilizando
%s. Claro que existe maneiras de fazer a leitura de mais uma palavra usando
scanf(). Poderíamos utilizar
scanf("
%[^\n]s",
var), informando que o
scanf() vai ler até encontrar um
ENTER. O bom é utilizarmos um
fflush(
stdin), antes do
scanf(), para limpar o
buffer do teclado. É sempre bom lembrar que não colocamos "
&" antes de
scanf() quando se trata de strings.
Ex:
#include<stdio.h>
main()
{
char materia;
puts("Insira o nome da materia:");
scanf("
%s",materia);
printf("Matéria:
%s" ,materia);
system("pause");
}
►
Gets
Essa função tem a capacidade de ler mais de uma palavra. Sendo para alguns, uma das mais apropriadas para ler strings.
Ex:
#include<stdio.h>
main()
{
char nome[60];
puts("Insira seu nome completo:");
gets(nome);
printf("Seu nome é:
%s", nome);
}
►Funções Especias para manipular Strings
As seguintes funções tem o objetivo de auxiliar o programador, sendo consideradas as principais para manipular strings. Elas se encontram na biblioteca <string.h>, por isso não se esqueça de chamar essa biblioteca em seus programas, quando for utilizar essas funções, evitando assim possíveis erros.
►1 - strlen: Devolve o número de caracteres de uma string.
Ex:
#include <stdio.h>
#include <string.h>
main()
{
char psg[60]; // personagem
int tamanho;
puts("Ins nome do personagem:");
gets(psg);
tamanho = strlen(psg);
printf("O personagem tem %d caracteres.", tamanho);
}
►2 - strcmp: Função usada para comparar duas strings. Podemos levar em consideração as seguintes informações.
strcmp(string1,string2);
strcmp("bola","barco"). A resposta é: O primeiro é maior, pois 'o' é maior que 'a'.
strcmp("canudo","juiz"). A resposta é: O segundo é maior, pois 'c' é menor que 'j'.
strcmp("navio","navio"). A resposta é: Os dois são iguais.
O que essa função faz é analisar o primeiro caractere das strings passadas por seus parâmetros, comparando eles entre si. A letra maior é sempre a que vem depois. Se a primeira letra da string1 for maior que a da string2, então string1 é maior. Se as duas strings tiverem a primeira letra igual, então a função verifica a segunda letra e assim por diante. Se ao chegar ao fim da leitura e ambas tiverem os mesmos caracteres, as duas serão classificadas como iguais.
Ex:
#include <stdio.h>
#include <string.h>
main()
{
char z1[60], z2[60];
int valor;
puts("Insira uma palavra:");
gets(z1);
puts("Insira outra palavra:");
gets(z2);
valor = strcmp(z1,z2); // atribuindo o valor da função a variável
if(valor == 0)
puts("Igual!!!");
else if(valor > 0)
puts("Primeira é maior.");
else
puts("Segunda é maior.");
}
►3 - strcpy: É uma função que recebe dois argumentos, copiando o conteúdo de uma string para outra. Sua definição é: strcpy(char *dest, char*orig), a orig copiada para dest.
Ex:
#include <stdio.h>
#include <string.h>
main()
{
char z[60], zCopia[60];
puts("Insira um nome:");
gets(z);
strcpy(zCopia, z);
printf("O nome é: %s", zCopia);
}
►4 - isNull: Essa função verifica se a string contém um caractere, devolvendo um valor lógico. Ela não faz parte da linguagem C, o que pode ocasionar erro em seu compilador, mas eu achei um exemplo de como pode ser usada.
Ex:
#include <stdio.h>
main()
{
char z[60];
int valor;
puts("Insira um nome:");
gets(z);
valor = isNull(z); // atribuindo o valor da função a variável
printf("%d", valor); // retorna 0(falso) ou 1(verdadeiro)
}
int isNull(char *z)
{
return (z[0] == '\0');
}
►5 - strcat: Concatena a string orig com a dest. Sua definição: strcat(char *dest, char *orig).
Ex:
#include <stdio.h>
#include <string.h>
main()
{
char z[60], zCopia[60];
puts("Insira uma palavra:");
gets(z);
strcpy(zCopia,z);
strcat(z, zCopia);
printf("Palavra = %s", z);
}
►6 - strcountc: Devolve o número de vezes que um determinado caractere apareceu em uma string. Sua definição: strcountc(char *z, char a). :)
Ex:
#include <stdio.h>
#include <string.h>
int strcountc(char *z, char a);
main()
{
char z[60];
int valor;
puts("Insira uma palavra:");
gets(z);
valor = strcountc(z, 'a');
printf("O 'a' apareceu %d vezes.", valor);
}
int strcountc(char *z, char a)
{
int c, contar;
for(c=contar=0; z[c]!='\0'; c++)
if(z[c]==a)
contar++;
return contar;
}
►7 - strcountd: Mostra o números de dígitos na string. Sua definição: strcountd(char *z).
Ex:
#include <stdio.h>
#include <string.h>
int strcountd(char *z);
main()
{
char z[60];
int valor;
puts("Insira uma palavra:");
gets(z);
valor = strcountd(z);
printf("%s tem %d digitos." , z, valor);
}
int strcountd(char *z)
{
int c, contar;
for(c=contar=0; z[c]!='\0'; c++)
if(isdigit(z[c]))
contar++;
return contar;
}
►8 - indchr: Mostra o índice da primeira ocorrência de um determinado caractere na string.
Ex:
#include <stdio.h>
#include <string.h>
int indchar(char *z, char a);
main()
{
char z[60];
int valor;
puts("Insira uma palavra:");
gets(z);
valor = indchar(z, 'o');
if(valor<0)
{
printf("O caractere 'o' não se encontra na string.");
}
else
{
printf("Posição %d" , valor);
}
}
int indchar(char *z, char a)
{
int c;
for(c=0; z[c]!='\0'; c++)
if(z[c]==a)
return c;
return -1;
}
►9 - strset: Substitui todas as posições de uma string com um determinado caractere.
Ex:
#include <stdio.h>
#include <string.h>
main()
{
char z[60];
puts("Insira a senha:");
gets(z);
printf("Senha = %s", strset(z, '*'));
}
►10 -
strupr e
strlwr: Uma imprime uma string
maiúscula, e a outra uma string
minúscula, respectivamente. Para evitar erros, inclua a função <ctype.h>.
Ex:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
main()
{
char z[60];
puts("Insira uma palavra:");
gets(z);
printf("Maiúsculo = %s\n", strupr(z));
printf("Minúsculo =
%s",
strlwr(z));
}
►11 -
strcounta - Devolve apenas letras. Mudei pouca coisa em relação a de números.
#include <stdio.h>
#include <string.h>
int strcounta(char *z);
main()
{
char z[60];
int valor;
puts("Insira uma palavra:");
gets(z);
valor = strcounta(z);
printf("Tem %d letra(s)." ,valor);
}
int strcounta(char *z)
{
int c, contar;
for(c=contar=0; z[c]!='\0'; c++)
if (!isdigit (z[c])) // verifica se é um número
contar++;
return contar;
}
E "eras isso". Essas são apenas algumas formas que podemos manipular nossas strings. Lembrando que o que foi mostrado, apenas arranha a superfície do que pode ser feito com strings em C. Você pode criar ou implementar novas strings a partir do que viu, traçando uma boa lógica. :)
►
Menu da Linguagem C
Até a próxima! ^^