Uma string é uma sequência de caracteres que permite representar nomes, endereços e outras informações textuais.
Em C, strings são implementada como vetores de caracteres terminados por um caractere especial '\0' (que é considerado no tamanho do vetor). As aspas duplas (“…”) são usadas para declarar strings constantes.
Exemplos:
char nome[100] ; // variável com até 99 caracteres char *endereco ; // ponteiro para uma string (não aloca espaço) endereco = "Rua da Batata, 1000" ; // string constante (com \0 no fim)
Deve-se observar que uma string é um vetor de caracteres, então as duas declarações abaixo são equivalentes:
char codigo[] = "XT47A" ; char codigo[] = { 'X', 'T', '4', '7', 'A', '\0' } ;
Além disso, a visão da string como vetor permite o acesso aos caracteres individuais que a compõem:
for (i=0; i < strlen (str); i++) // varre todos os caracteres if (str[i] >= 'a' && str[i] <= 'z') // se for letra minúscula str[i] -= 32 ; // converte em letra maiúscula
A escrita de strings pode ser feita com printf
(usando o formato %s
ou %NNNs
), puts
ou ainda putchar
(para escrever caractere por caractere):
char nome[] = "Homer Simpson" ; printf ("Nome: %s\n", nome) ; // com printf puts (nome) ; // com puts for (i = 0; i < strlen(nome); i++) // com putchar putchar (nome[i]) ;
Por sua vez, a leitura de strings pode ser feita usando a função scanf
:
#define SIZE 100 char nome[SIZE+1] ; // não esquecer do '\0' no final da string printf ("Digite seu nome: ") ; // lê até encontrar espaço, tabulação, nova linha ou fim de arquivo scanf ("%s", nome) ; // idem, no máximo 20 caracteres scanf ("%20s", nome) ; // lê somente letras e dígitos (até encontrar outro caractere) scanf("%[A-Za-z0-9]", nome); // lê até encontrar nova linha (\n) scanf("%[^\n]", nome); getchar() ; // para ler o "\n" no fim da linha
Pode-se também usar a função fgets
:
// lê da entrada padrão até encontrar \n ou SIZE caracteres fgets (nome, SIZE, stdin) ; // a string lida por fgets pode incluir o \n do fim de linha, // se ele foi encontrado; ele pode ser retirado assim: nome[strcspn (nome, "\n")] = 0;
Para mais informações sobre as funções acima, deve ser consultada a respectiva página de manual Unix.
gets
não limita o número de bytes lidos e pode provocar estouro de buffer, por isso não deve ser usada! Use a função fgets
em seu lugar.
A manipulação de strings é geralmente efetuada através de funções disponíveis na biblioteca padrão C, que podem ser acessadas através do arquivo de cabeçalho string.h
. Algumas das funções mais usuais são:
função | operação realizada |
---|---|
int strlen (s) | informa o número de caracteres da string s (sem considerar o '\0' final) |
char ∗ strcpy (b, a) | copia a string a no local indicado por b ; a área de memória de destino deve ter sido previamente alocada (como variável normal ou dinâmica) |
char ∗ strdup (s) | Aloca uma área de memória dinâmica, copia a string s nela e devolve um ponteiro para a mesma |
char ∗ strncpy (b, a, n) | Copia n caracteres da string a no local indicado por b |
int strcmp (a, b) | Compara as duas strings indicadas, retornando 0 se forem iguais, <0 se a<b e >0 se a>b |
int strncmp (a, b ,n) | Idem, mas só considera os n primeiros caracteres |
char ∗ strcat (a, b) | Concatena a string b ao final da string a (deve haver espaço disponível previamente alocado) |
char ∗ strncat (a, b, n) | Idem, mas só concatena os n primeiros caracteres |
char ∗ strchr (s, c) | Retorna um ponteiro para a primeira ocorrência do caractere c na string s , ou NULL se não encontrar |
char ∗ strrchr (s, c) | Idem, mas retorna um ponteiro para a última ocorrência do caractere |
Muitas outras funções para manipulação de strings estão disponíveis na página de manual (comando man string
) ;
Escrever programas em C para:
rev
do Unix.strlen
).sort
do Unix.