sábado, 6 de abril de 2013

Strings


Em C, strings são vetores de char. PONTO. SEM MAIS. É um vetor de char com um caractere de final de string (\0) no final. A gente até tem funções específicas de strings, mas, como strings são vetores de char, no fundo essas funções lidam com vetores de char. A gente não isso.
Vamos à declaração:
char string[] =palavrinha; //prefiro esse jeito, ele fica do tamanho do que eu colocar
char string[20] =palavrinha; //declarando o tamanho eu posso preencher depois
char *string =palavrinha; //no me gusta

OBSERVAÇÃO IMPORTANTE: char string[] = “aeiou” é DIFERENTE de char string[] = {'a', 'e', 'i', 'o', 'u'}. O primeiro é uma string e contém o caractere \0 para delimitar seu final, então tem 6 posições. O segundo é um vetor de char comum, com 5 posições e nenhum \0.

Voltando. Temos funções pra facilitar nossa vida na hora de lidar com strings. Vou fazer uma tabelinha, acho mais fácil. chega. A tabela (só com as principais):

Função
Descrição
Uso
strlen
Devolve o tamanho da string
int i = strlen(minha_string);
strcpy
Copia a string de origem pra de destino
strcpy (destino, origem);
strcat
Acrescenta a string de origem no final da de destino
strcat (destino, origem);
strcmp
Compara duas strings e retorna um número:
>0 caso a primeira seja maior que a segunda
0 caso sejam iguais
<0 caso a segunda seja maior
Ex: strcmp (menino,menina) retorna >0 pois no finalzinho, 'o' é alfabeticamente maior que 'a'.


i = strcmp (primeira, segunda);

i = stricmp (primeira, segunda);
stricmp
Igual a anterior, só que ignora maiúsculas e minúsculas
strchr
Procura um caractere dentro de uma string. Retorna o índice dele ou -1 se não existir.
i = strchr(string, char);
strstr
Procura uma string dentro de outra string. Retorna o índice dela ou -1 se não existir.
i = strstr(procurar, ser_procurada);
strlwr
Passa toda a string pra minúsculas
sua_string = strlwr(sua_string);
strupr
Passa toda a string pra maiúsculas
sua_string = strupr(sua_string);
toupper
Passa um caractere pra maiúscula (precisa da biblioteca ctype.h)
String[5] = toupper(string[5]);
tolower
Passa um caractere pra minúscula (precisa da biblioteca ctype.h)
String[5] = tolower(string[5]);

AH, AH, pra imprimir string no printf usa %s. Pode usar puts(sua_string), ele muda de linha, mas é a mesma coisa que printf com %s. Pra ler, o scanf com %s funciona, mas quando ele um espaço, tab ou enter ele para de ler. Portanto, eu acho melhor a função gets(variavel_de_destino), que pega os espaços.
Quem passou pelo problema da leitura dar errado use a função fflush(stdin) depois da leitura que isso não acontece mais. Essa função limpa o buffer de entrada.

Nenhum comentário:

Postar um comentário