Arrays de caracteres – strings
7.3 FUNÇÕES PARA MANIPULAÇÃO DE STRINGS
A biblioteca-padrão da linguagem C possui funções especialmente desenvolvidas para a manipulação de strings na biblioteca <string.h>. A seguir são apresentadas algu- mas das mais utilizadas.
7.3.1 Tamanho de uma string
Para obter o tamanho de uma string, usa-se a função strlen():
char str[15] = “teste”;
printf(“%d”,strlen(str));
Nesse caso, a função retornará 5, que é o número de caracteres na palavra “teste”, e não 15, que é o tamanho do array de caracteres.
A função strlen() retorna o número de caracteres que existem antes do caractere ‘\0’, e não o tamanho do array onde a string está armazenada.
7.3.2 Copiando uma string
Vimos que uma string é um array e que a linguagem C não suporta a atribuição de um array para outro. Nesse sentido, a única maneira de atribuir o conteúdo de uma string a outra é a cópia, elemento por elemento, de uma string para outra. A linguagem C possui uma função que realiza essa tarefa para nós: a função strcpy():
140 L I N G UA G E M C C O M P L E TA E D E S C O M P L I C A D A
Basicamente, a função strcpy() copia a sequência de caracteres contida em origem para o array de caracteres destino (Figura 7.3).
Exemplo: strcpy() 01 02 03 04 05 06 07 08 09 10 #include <stdio.h> #include <stdlib.h> int main(){ char str1[100], str2[100];
printf(“Entre com uma string: ”); gets(str1); strcpy(str2, str1); printf(“String 1: %s\n”,str1); printf(“String 2: %s\n”,str2); system(“pause”); return 0; } F I G U R A 7 . 3
Para evitar estouro de buffer, o tamanho do array destino deve ser longo o suficiente para conter a sequência de caracteres contida em origem.
Concatenando strings
A operação de concatenação é outra tarefa bastante comum ao se trabalhar com strings. Basicamente, essa operação consiste em copiar uma string para o final de outra string. Na linguagem C, para fazer a concatenação de duas strings, usa-se a função strcat():
strcat(char *destino, char *origem)
Basicamente, a função strcat() copia a sequência de caracteres contida em origem para o final da string destino. O primeiro caractere da string contida em origem é colo- cado no lugar do caractere “\0” da string destino (Figura 7.4).
Exemplo: strcat() 01 02 03 04 05 06 07 08 09 10 #include <stdio.h> #include <stdlib.h> int main(){ char str1[15] = “bom ”; char str2[15] = “dia”; strcat(str1,str2); printf(“%s”,str1); system(“pause”); return 0; } F I G U R A 7 . 4
Para evitar estouro de buffer, o tamanho do array destino deve ser longo o suficiente para conter a sequência de caracteres contida em ambas as strings: origem e destino.
Comparando duas strings
Da mesma maneira como o operador de atribuição não funciona para strings, o mesmo ocorre com operadores relacionais usados para comparar duas strings. Desse modo, para saber se duas strings são iguais usa-se a função strcmp():
int strcmp(char *str1, char *str2)
A função strcmp() compara posição a posição as duas strings (str1 e str2) e retorna um valor inteiro igual a zero no caso de as duas strings serem iguais. Um valor de re- torno diferente de zero significa que as strings são diferentes (Figura 7.5).
Exemplo: strcmp() 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 #include <stdio.h> #include <stdlib.h> int main(){ char str1[100], str2[100];
printf(“Entre com uma string: ”); gets(str1);
printf(“Entre com outra string: ”); gets(str2); if(strcmp(str1,str2) == 0) printf(“Strings iguais\n”); else printf(“Strings diferentes\n”); system(“pause”); return 0; } F I G U R A 7 . 5
A função strcmp() é case-sensitive. Isso significa que letras maiúsculas e minúsculas tornam as strings diferentes.
142 L I N G UA G E M C C O M P L E TA E D E S C O M P L I C A D A
7.4 EXERCÍCIOS
1) Faça um programa que leia uma string e a imprima na tela.
2) Faça um programa que leia uma string e imprima as quatro primeiras letras dela. 3) Sem usar a função strlen(), faça um programa que leia uma string e imprima
quantos caracteres ela possui.
4) Faça um programa que leia uma string e a imprima de trás para a frente.
5) Faça um programa que leia uma string e a inverta. A string invertida deve ser armazenada na mesma variável. Em seguida, imprima a string invertida.
6) Leia uma string do teclado e conte quantas vogais (a, e, i, o, u) ela possui. Entre com um caractere (vogal ou consoante) e substitua todas as vogais da palavra dada por esse caractere. Ao final, imprima a nova string e o número de vogais que ela possui.
7) Faça um programa que leia uma string e imprima uma mensagem dizendo se ela é um palíndromo ou não. Um palíndromo é uma palavra que tem a propriedade de poder ser lida tanto da direita para a esquerda como da esquerda para a direita. Exemplos: ovo, arara, rever, asa, osso etc.
8) Construa um programa que leia duas strings do teclado. Imprima uma mensagem informando se a segunda string lida está contida dentro da primeira.
9) Construa um programa que leia duas strings do teclado. Imprima uma mensagem informando quantas vezes a segunda string lida está contida dentro da primeira. 10) Escreva um programa que leia uma string do teclado e converta todos os seus
caracteres em maiúscula. Dica: subtraia 32 dos caracteres cujo código ASCII está entre 97 e 122.
11) Escreva um programa que leia uma string do teclado e converta todos os seus ca- racteres em minúscula. Dica: some 32 dos caracteres cujo código ASCII está entre 65 e 90.
12) Escreva um programa que leia o nome e o valor de determinada mercadoria de uma loja. Sabendo que o desconto para pagamento à vista é de 10% sobre o valor total, calcule o valor a ser pago à vista. Escreva o nome da mercadoria, o valor total, o valor do desconto e o valor a ser pago à vista.
13) Escreva um programa que recebe uma string S e dois valores inteiros não negati- vos i e j. Em seguida, imprima os caracteres contidos no segmento que vai de i a j da string S.
14) O código de César é uma das técnicas de criptografia mais simples e conhecidas. É um tipo de substituição no qual cada letra do texto é substituída por outra, que se apresenta n posições após ela no alfabeto. Por exemplo, com uma troca de três posições, a letra A seria substituída por D, B se tornaria E e assim por diante. Escreva um programa que faça uso desse código de César para três posições. Entre com uma string e imprima a string codificada. Exemplo:
String: a ligeira raposa marrom saltou sobre o cachorro cansado
Nova string: d oljhlud udsrvd pduurp vdowrx vreuh r fdfkruur fdqvdgr 15) Escreva um programa que leia duas strings e as imprima em ordem alfabética, a
C A P Í T U LO 8