Strings em C são como se chamam cadeias de caracteres que podem representar texto. Strings são, internamente, vetores de caracteres, então a declaração de uma string em C é:
char meu_nome[20];para você escrever strings em C você usa aspas duplas, e para caracteres aspas simples. Ou seja, 'a' é um caracter e "a" é uma string. Toda string em C é um vetor de caracteres com o caracter '\0' no final. Internamente, a cara do vetor é
v0 | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | v9 |
'a' | 'l' | 'e' | 'x' | 'a' | 'n' | 'd' | 'r' | 'e' | '\0' |
Isso permite que as funções que lidem com strings não precisem receber o tamanho da string como parâmetro; elas podem calcular o tamanho contando quantos caracteres existem até o primeiro '\0'. Uma função para calcular o tamanho de uma string é strlen, e pode ser definida como
int strlen(char str[]) { int i; while (str[i] != '\0') i++; return i; }
Ao mesmo tempo, se você for criar uma string manualmente e esquecer de colocar o '\0' no final todas as partes do programa que lidam com strings vão entrar em parafuso. Você pode, em C, definir uma string também das seguintes formas:
char nome[20] = "alexandre"; char nome[] = "alexandre";
Existem diferenças sutis entre essas formas mas não falaremos delas agora.
Para ler uma string que é só uma palavra, o comando é
char string[20]; scanf("%s", string);Reparem que não tem o & antes de string. Isso é porque string é um vetor, e passar um vetor pra uma função já dá à função o direito de alterá-lo (ao contrário de variável, que precisa de & antes). Para imprimir o comando é
printf("%s", string);Se você quiser ler uma string que contenha espaços, o comando é mais complexo, e é
char string[20]; scanf("%20[^\n]", string);O 20 tem que ser trocado pro tamanho da string. Repare que isso pode deixar a string sem o '\0' no final, então depois de executar isso é sempre bom copiar o '\0' com
string[19] = '\0';
Em C strings não podem ser comparadas com ==; é necessário usar as funções strcmp (strcmp(a,b) retorna -1 se a vem antes de b, 0 se são iguais e 1 se a vem depois de b na ordem alfabética) ou strcasecmp (que é igual a strcmp mas não diferencia letras maiúsculas de minúsculas).
Já vimos strlen, vamos ver outras. Todas essas operações estão no cabeçalho
#include <string.h>
Para copiar a string b em cima da string a uma função é
void strcpy(char a[], char b[]) { int i; for (i = 0; b[i] != '\0'; i++) { a[i] = b[i]; } a[i] = b[i]; }
Para copiar a string b pra depois do fim da string a:
void strcat(char a[], char b[]) { int i; while (a[i] != '\0') i++; do { a[i] = b[i]; } while (b[i] != '\0'); }
Para achar a posição do caracter c na string a uma função é:
int strchr(char a[], char c) { int i; for (i = 0; a[i] != '\0'; i++) if (a[i] == c) return i; return -1; }
Para converter uma string em inteiro
int atoi(char a[]) { int i, n = 0; for (i = 0; a[i] != '\0'; ++i) { n *= 10; n += a[i]-'0'; } return n }Essa função, se chamada com "123" retorna 123.
Sugestão para praticar: implementar strcmp.
Date: 2010-09-16 22:46:45 BRT
HTML generated by org-mode 6.21b in emacs 23