Italo Info


Conjuntos de caracteres (Strings)

Através da linguagem C, é possível manipular dados que representam uma sequência de caracteres. Eu me refiro ao tipo string (array de caracteres - chars). Por exemplo, veja o programa abaixo:

#include <stdio.h> #include <string.h> int main() { char palavra[30]; int tam; printf( "Informe uma palavra: " ); gets( palavra ); tam = strlen( palavra ); if ( tam > 0 ) printf( "\nA primeira letra da palavra eh: %c", palavra[0] ); else printf( "\nVoce nao digitou uma palavra!" ); return 0; }

No programa acima é declarado um array de chars para armazenar o conjunto de caracteres (string). Logo após a declaração de variáveis, o programa solicita que o usuário informe uma palavra e a armazena na variável de nome palavra. Em seguida, o programa calcula a quantidade de caracteres da string informada utilizando a função strlen (str de string e len de length - tamanho). Caso o usuário não tenha digitado um texto vazio, a primeira letra da palavra informada é impressa.

Como uma string é armazenada

Uma string é armazenada como um array de chars. Por exemplo: A palavra "amor" fica armazenada da seguinte forma:

Caracteres a m o r \0
Indice 0 1 2 3 4

Preste atenção ao vetor string utilizado para armazenar a palavra amor. Repare o caractere \0 (Caractere nulo) marca o final da string. Se fosse a fraze "Meu amor!" ficaria armazenado conforme a seguir:

Caracteres M e u a m o r ! \0
Indice 0 1 2 3 4 5 6 7 8 9

Veja abaixo, um programa que solicita que o usuário informe uma string (a leitura é feita através da função gets) e mostra se a string que o usuário digitou é igual a palavra "amor":

#include <stdio.h> #include <string.h> int main() { char palavra1[30]; char palavra2[30]; strcpy( palavra1, "amor" ); printf( "Informe uma palavra: " ); gets( palavra2 ); if ( strcmp( palavra1, palavra2 ) == 0 ) printf( "\nVoce digitou a palavra amor" ); else printf( "\nVoce nao digitou a palavra amor" ); return 0; }

Veja o próximo exemplo que trata-se de um programa que pede que o usuário digite duas strings e informa se a primeira é igual, menor ou maior que a segunda. Ex: A palavra cadeira é menor que a palavra ovo, pois, a primeira letra da palavra cadeira (que é 'c'), é menor que a primeira letra da palavra ovo (que é 'o').

#include <stdio.h> #include <string.h> int main() { char palavra1[30]; char palavra2[30]; int cmp; printf( "Informe uma palavra(1): " ); gets( palavra1 ); printf( "Informe uma palavra(2): " ); gets( palavra2 ); cmp = strcmp( palavra1, palavra2 ); /* ATENCAO: a funcao strcmp permite que duas strings seja verificadas em ordem alfabética se a primeira eh maior, menor ou igual a segunda (conforme a ordenacao) */ if ( cmp == 0 ) printf( "\nA primeira palavra eh igual a segunda." ); else if ( cmp < 0 ) printf( "\nA primeira palavra eh maior que a segunda." ); else printf( "\nA primeira palavra eh menor que a segunda." ); return 0; }

Abaixo um programa que concatena duas strings e mostra o resultado. Para concatenação, é utilizada a função strcat conforme a seguir:

#include <stdio.h> #include <string.h> int main() { char palavra1[60]; char palavra2[30]; strcpy( palavra1, "Oi! meu nome eh " ); strcpy( palavra2, "Italo" ); strcat( palavra1, palavra2 ); printf( "%s", palavra1 ); return 0; }

Exercícios

1) Faça um programa que leia uma string e verifique se a primeira letra da string lida é igual a "C"

2) Faça um programa que leia uma string e verifique se a primeira letra é igual a ultima.

Atenção: É necessário verificar o tamanho da string que deve ser maior ou igual a 1.

3) Faça um programa que leia uma string, inverta os valores da primeira letra e a ultima e mostre a string alterada.

Atenção: É necessário verificar se a string lida tem tamanho maior ou igual a 2.
Dica: para inverter o valor de duas variáveis, por exemplo, de nome (a) e (b), utilize uma variável auxiliar (aux) como a seguir:
aux = a;
a = b;
b = aux;

4) Faça um programa que verifique se uma string é palíndromo. Isto é, uma palavra é dita palindromo se a primeira letra é igual a ultima, a segunda é igual a antepenultima e, assim, sucessivamente.

Exemplo: São palíndromos as palavras: ovo, erre, abcba, ijkji, ijji. Não são palíndromos as palavras: ova, erra, abcea.