UFSM > Ciência da Computação

Primeiro Semestre de 2013
Professora: Juliana Kaizer Vizzotto

Cadeia de Caracteres ou Strings

  1. Cadeias de caracteres (strings), em C, são representadas por vetores do tipo `char` terminadas, obrigatóriamente, pelo caractere nul (`'\0'`). Portanto, para armazenarmos uma cadeia de caracteres, devemos reservar posição adicional para o caractere de fim da cadeia.

  2. Todas as funções que manipulam cadeias de caracteres recebem como parâmetro um vetor de `char`, isto é, um ponteiro para o primeiro elemento do vetor que representa a cadeia, e processam caractere por caractere, até encontrarem o nulo, que sinaliza final da cadeia.

  3. Por exemplo, o especificar de formato `%s` da função `printf` permite imprimir uma cadeia de caracteres. A função `printf` então recebe um vetor de `char` e imprime elemento por elemento até encontrar o caractere nulo. Por exemplo:

    int main ( void )
    {
     char cidade[4];
     cidade[0] = 'R';
     cidade[1] = 'i';
     cidade[2] = 'o';
     cidade[3] = '\0';
     printf("%s \n", cidade);
     return 0;
    }
    

  4. O que aconteceria se o caractere `\0` não fosse colocado?

Leitura de Caracteres e Cadeias

  1. Para capturarmos o valor de um caractere simples fornecido pelo usuário via teclado:

    char a;
    ...
    scanf("%c",&a);
    ...
    
    Note que o especificar `%c` não pula os caracteres em branco!

  2. Se desejamos pular todas as ocorrências de caracteres brancos que antecedam o caractere que queremos capturar, basta incluir um espaço em branco no formato, antes do especificador.
char a;
...
scanf(" %c",&a);
...
  1. Para ler uma cadeia de caracteres:

    char cidade[81];
    ...
    scanf("%s",cidade);
    

    Devemos notar que não usamos o caractere & na passagem da cadeia para a função, pois a cadeia é um vetor (o nome da variável representa o endereço do primeiro elemento do vetor e a função atribui os valores dos elementos a partir desse endereço).

  2. Note que o uso do especificar `%s` na leitura é limitado, pois ele lê somente nomes simples, i.e, não lê espaços e as palavras após o espaço.
  1. Para ler nomes compostos, podemos usar o especificador de formato `%[...]`, no qual listamos entre os colchetes todos os caracteres que aceitaremos na leitura. Assim, o formato ```"%[aeiou]" lê sequências de vogais, i.e., a leitura prossegue até que se encontre um caractere que não seja uma vogal.

  2. Se o primeiro caractere entre os colchetes for o acento circunflexo, teremos o efeito inverso (negação). Assim, com o formato "%[^aeiou]" a leitura prossegue enquanto uma vogal não for encontrada. Esta construção permite capturarmos nomes compostos. Consideremos o código abaixo:

    char cidade[81];
    ...
    scanf(" %[^\n]", cidade);
    ...
    
    A função `scanf` agora lê uma sequência de caracteres até que seja encontrado o caractere de mudança de linha `('\n')`.

  3. Podemos também limitar o número máximo de caracteres que serão capturados:

    char cidade[81];
    ...
    scanf(" %80[^\n]", cidade); /* lê no máximo 80 caracteres */
    ...
    

Links

Apostilas

Livros

Página criada em: Seg Jun 17 15:00:00 BRT 2013. Última atualização em: Mon Jun 17 15:36:41 2013. Autoria: Juliana Kaizer Vizzotto.