Você está na página 1de 9

Strings

Strings são vetores de chars. Nada mais e nada menos. As strings são o uso
mais comum para os vetores. Devemos apenas ficar atentos para o fato de que
as strings têm o seu último elemento como um '\0'. A declaração geral para
uma string é:

char nome_da_string [tamanho];

Devemos lembrar que o tamanho da string deve incluir o '\0' final. A biblioteca
padrão do C possui diversas funções que manipulam strings. Estas funções
são úteis pois não se pode, por exemplo, igualar duas strings:

string1=string2; /* NAO faca isto */

Fazer isto é um desastre. As strings devem ser igualadas elemento a elemento.

Para armazenar uma string em C devemos reservar uma posição adicional


para o caractere de fim da cadeia. Todas as funções de manipulação de strings
em C recebem como parâmetro um vetor de char, isto é, um ponteiro para o
primeiro elemento do vetor que representa a string. Ex.: para imprimir uma
string utilizando o comando printf, utiliza-se o especificador de formato %s printf
recebe um vetor de char e imprime elemento por elemento até encontrar o
caractere nulo. Vantagem de delimitar a string por ‘\0’ não é necessário passar
explicitamente o número de caracteres a ser considerado.

main( )

char faculdade[4];

faculdade[0] = ‘U’;

faculdade[1] = ‘V’;

faculdade[2] = ‘V’;

faculdade[3] = ‘\0’;

printf(“%s \n”, faculdade);

system(“pause”);

}
Se o caractere ‘\0’ não fosse colocado, a função printf seria executada de forma
errada, pois não conseguiria identificar o final da cadeia.

Como as strings são vetores, podemos reescrever o código anterior


inicializando os elementos diretamente na declaração:

main( )

char faculdade[] = {‘U’,‘V’,‘V’,‘\0’}; /*a variável

faculdade é automaticamente dimensionada e

inicializada com 4 elementos.*/

printf(“%s \n”, faculdade);

system(“pause”);

Exemplos de declarações e inicializações de strings:

char s1[] = “”; //cadeia vazia (‘\0’)

char s2[] = “Vila Velha”; //vetor de 11 elementos

char s3[81]; /*string capaz de armazenar cadeias de até 80 elementos, com


conteúdo desconhecido */

char s4[81] = “UVV”; /* também capaz de armazenar até 80 caracteres, mas


seus primeiros 4 elementos já foram atribuídos na declaração. */

Leitura de caracteres:

char a;

...

scanf(“%c”, &a);

...

Obs.:Diferentemente dos especificadores %d e %f, o %c não pula os


caracteres brancos (espaço, tabulação ou nova linha).
char a;

...

scanf(“ %c”, &a); /* o branco no formato pula brancos

da entrada */

...

Para capturar uma string:

char faculdade[81];

...

scanf(“%s”, faculdade); /* aqui não foi usado o caractere & pois a string é um
vetor – o nome da variável representa o endereço do primeiro elemento do
vetor */

Uso do especificador %s na leitura é limitado, pois ele pula os caracteres


brancos, capturando somente a primeira seqüência de não-brancos.

Como ler nomes compostos?

Especificador %[...], onde especificamos entre os colchetes todos os caracteres


que aceitaremos na leitura. Exemplo: o formato “%[aeiou]” lê seqüências de
vogais, isto é a leitura prossegue até se encontrar um caractere que não seja
vogal.

Se o primeiro caractere for o acento circunflexo (^), teremos o efeito inverso


(negação). Assim, “%[^aeiou]” faz a leitura enquanto uma vogal não for
encontrada.

char faculdade[81];

scanf(“ %[^\n]”, faculdade); /* lê seqüência de caracteres até que seja


encontrado o caractere de mudança de linha (‘\n’), ou seja, captura-se

até que ele tecle “Enter” */

Perigo: se o usuário fornecer uma linha com mais de 80 caracteres... invasão


de espaço de memória não reservado!

char faculdade[81];

scanf(“ %80[^\n]”, faculdade); /* lê no máximo 80 caracteres */


Função que imprime uma string.

void imprime(char* s)

int i;

for (i=0; s[i] != ‘\0’; i++)

printf(“%c”, s[i]);

printf(“\n”);

Esse código teria uma funcionalidade análoga à utilização do especificador de


formato %s.

void imprime (char* s)

printf(“%s\n”, s);

Função para retornar o comprimento de uma string – basta contar o número de


caracteres até o caractere nulo.

int comprimento (char* s)

int i;

int n = 0; /* contador */

for (i=0; s[i] != ‘\0’; i++)

n++;

return n;

O trecho de código a seguir faz uso desta função:


#include <stdio.h>

int comprimento (char* s)

main ( )

int tam;

char cidade[] = “Vila Velha”;

tam = comprimento(cidade);

printf(“A string \“%s\“ tem %d caracteres\n”, cidade, tam);

system(“pause”);

Função que copia os elementos de uma string para outra:

void copia (char* dest, char* orig)

int i;

for(i=0; orig[i] != ‘\0’; i++)

dest[i] = orig[i];

dest[i] = ‘\0’; /* fecha a cadeia copiada */

Função para concatenar uma string com outra já existente:


void concatena (char* dest, char* orig)

int i=0; /* indice usado na cadeia de destino */

int j; /* indice usado na cadeia de origem */

/* acha o final do destino */

while (dest[i] != 0)

i++;

/* copia elementos da origem para o final do destino */

for (j=0; orig[j] != ‘\0’; j++)

dest[i] = orig[j];

i++;

dest[i] = ‘\0’; /* fecha a cadeia destino */

Vamos ver agora algumas funções básicas para manipulação de strings.

- gets

A função gets( ) lê uma string do teclado. Sua forma geral é:

gets (nome_da_string);

O programa abaixo demonstra o funcionamento da função gets( ):

#include <stdio.h>
#include <stdlib.h>

main ( )
{
char nome[100];
printf ("Digite o seu nome: ");
gets (nome);
printf ("\n\n Ola %s",nome);
system(“pause”);
}

- strcpy

Sua forma geral é:

strcpy (string_destino,string_origem);

A função strcpy() copia a string-origem para a string- destino. Seu


funcionamento é semelhante ao da rotina apresentada na seção anterior. As
funções apresentadas nestas seções estão no arquivo cabeçalho string.h. A
seguir apresentamos um exemplo de uso da função strcpy():

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

main ()
{
char str1[100],str2[100],str3[100];
printf ("Entre com uma string: ");
gets (str1);
strcpy (str2,str1); /* Copia str1 em str2 */
strcpy (str3,"Voce digitou a string "); /* Copia "Voce digitou a string" em
str3 */
printf ("\n\n%s%s",str3,str2);
system(“pause”);
}

- strcat

A função strcat() tem a seguinte forma geral:

strcat (string_destino,string_origem);

A string de origem permanecerá inalterada e será anexada ao fim da string de


destino. Um exemplo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main ()
{
char str1[100],str2[100];
printf ("Entre com uma string: ");
gets (str1);
strcpy (str2,"Voce digitou a string ");
strcat (str2,str1); /* str2 armazenara' Voce digitou
a string + o conteudo de str1 */
printf ("\n\n%s",str2);
system(“pause”);
}

- strlen

Sua forma geral é:

strlen (string);

A função strlen() retorna o comprimento da string fornecida. O terminador nulo


não é contado. Isto quer dizer que, de fato, o comprimento do vetor da string
deve ser um a mais que o inteiro retornado por strlen().

Um exemplo do seu uso:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main ()
{
int size;
char str[100];
printf ("Entre com uma string: ");
gets (str);
size=strlen (str);
printf ("\n\nA string que voce digitou tem tamanho
%d",size);
system(“pause”);
}

- strcmp

Sua forma geral é:

strcmp (string1,string2);

A função strcmp() compara a string 1 com a string 2. Se as duas forem


idênticas, a função retorna zero. Se elas forem diferentes a função retorna não-
zero. Um exemplo da sua utilização:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main ()
{
char str1[100],str2[100];
printf ("Entre com uma string: ");
gets (str1);
printf ("\n\nEntre com outra string: ");
gets (str2);
if (strcmp(str1,str2))
printf ("\n\nAs duas strings são diferentes.");
else
printf ("\n\nAs duas strings são iguais.");
system(“pause”);
}

Exercício de Fixação

Faça um programa que leia quatro palavras pelo teclado, e armazene cada
palavra em uma string. Depois, concatene todas as strings lidas numa única
string. Por fim apresente esta como resultado ao final do programa.

Você também pode gostar