ELC1065 - Laboratório
Primeiro Semestre de 2013
Professora: Juliana Kaizer Vizzotto
Cadeia de Caracteres ou Strings
- 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. - 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. - 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; }
- O que aconteceria se o caractere
`\0`
não fosse colocado?
Leitura de Caracteres e Cadeias
- 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! - 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); ...
- 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). - 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.
- 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. - 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')`
. - 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
- Algoritmos e Estrutura de Dados.
HONDA, W.Y. & PARABONI, I.
Livros
- Introdução a Estrutura de Dados.
CELES, W.; CERQUEIRA, R. & RANGEL, J.L. - Introduction to Algorithms
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein.