Você está na página 1de 10

72

Algoritmos / Linguagem C Prof. Dr. Antnio Marcos SELMINI

Captulo 7 Manipulao de Strings e Caracteres


7.1 Introduo
Como j comentado anteriormente em nosso curso de Algoritmos, a linguagem C no apresenta um tipo string. Sabemos tambm desde o incio do nosso curso que uma string nada mais do que uma cadeia (conjunto) de caracteres. As strings so representadas usando aspas (), enquanto que os caracteres so representados usando aspas simples. Dessa forma temos: Exemplos de strings: Maria So Paulo Faculdade de Informtica Exemplos de caracteres: q s; Cada caractere em C ocupa um byte na memria. Dessa forma, C o caractere C (ocupa apenas 1 byte na memria) enquanto que, C um vetor de caracteres (ocupa 2 bytes na memria onde 1 byte reservado para o finalizador de strings). Para manipularmos uma cadeia de caracteres em C devemos trabalhar com vetores unidimensionais, ou seja, uma string em C uma cadeia de caracteres armazenadas em um vetor. A utilizao mais comum de um array unidimensional em C na definio de uma string. Portanto, strings so vetores do tipo char. Devemos estar atentos ao fato de que as strings tm como ltimo elemento um \0, que adicionado automaticamente ao final da string. Vale reforar que uma string um vetor de caracteres, mas o inverso falso, isto , um vetor de caracteres pode no ser uma string. A forma geral para declararmos uma string segue o mesmo padro para a declarao de um array unidimensional: char nome_da_string[tamanho]; onde tamanho representa o nmero mximo de caracteres que a string ir armazenar. Devemos incluir neste valor o finalizador de strings. Exemplo de declarao: char nome[20]; No exemplo acima, temos uma varivel vetor que armazena no mximo 20 caracteres. Lembre-se que o tamanho da string deve incluir o finalizador de strings (\0). A funo do finalizador de strings nica e estritamente para definir quais so as posies preenchidas dentro de vetor de caracteres das posies que no foram preenchidas. Por exemplo, se declararmos um vetor chamado

73

Algoritmos / Linguagem C Prof. Dr. Antnio Marcos SELMINI

nome com 200 posies e preenchermos com a string Ana, o que realmente acontece na memria? nome[0] nome[1] nome[2] nome[3] nome[4] nome[5] A n a \0 <lixo> <lixo> ... ... nome[199] <lixo>

As variveis strings podem ser inicializadas no momento da declarao da mesma forma que as variveis de outros tipos. No se esquea que uma string sempre vem entre aspas ( ). Exemplo: char nome[20] = Roberto; char nome[20] = {R,o, b, e, r, t, o}; //o \0 colocado automaticamente char nome[] = Roberto; // equivalente a nome[7+1] char *nome = Roberto; //declarao via ponteiro. equivalente ao exemplo logo acima.

7.2 Funes para manipulao de strings


A linguagem C apesar de no apresentar um tipo especfico string, apresenta uma srie de funes que podem ser aplicadas a uma varivel do tipo vetor de caracteres. A maioria das funes de manipulao de string apresenta seus cabealhos em string.h. Dentre as principais funes destacam-se: Funo printf() e puts() A funo printf() utilizada para escrever uma string no vdeo. A funo recebe como parmetro uma string que pode ser escrita diretamente no vdeo, por exemplo: printf(Testando strings). A funo printf() tambm pode imprimir o contedo de uma string que est armazenada em um vetor de caracteres. Nesse caso usa-se o formato prprio de string (%s). Por exemplo: char nome[] = Maria Cristina; char sobrenome[] = Silva; printf(%s %s, nome, sobrenome); Outra funo utilizada para escrever uma string no vdeo puts() (biblioteca stdio.h). A funo puts() utilizada exclusivamente para a impresso de strings, sejam constantes ou valores armazenados em variveis. A funo puts() escreve a string no vdeo e automaticamente muda de linha. Exemplo: puts(Testando strings); // equivalente a printf(Testando strings\n); Funo scanf() e gets() A funo scanf() permite a leitura de strings usando o formato %s. Para a leitura de strings a funo permite ler apenas uma palavra, ou seja, a funo l todos os caracteres at encontrar um espao em branco ou um TAB ou um ENTER. Para a leitura de strings a melhor a funo gets() da biblioteca stdio.h. A sintaxe para a funo gets() : gets( nome_da_string );

74

Algoritmos / Linguagem C Prof. Dr. Antnio Marcos SELMINI

Exemplo de utilizao da funo gets(): #include <stdio.h> #include <stdlib.h> int main() { char string[100]; printf (Digite o seu nome: ); gets (string); printf (\n\n Ola %s,string); system(pause); return(0); } Funo strlen() Uma funo bastante til na manipulao de strings a funo strlen() da biblioteca string.h, utilizada para retornar o comprimento da string. No comprimento retornado no includo o finalizador de strings. A forma geral para a funo : strlen( nome_da_string ); A funo strlen() retorna um valor do tipo inteiro. Exemplo: #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int tamanho; char str[100]; printf(Entre com uma string: ); gets(str); tamanho = strlen(str); printf(\n\nTamanho da string digitada %d, tamanho); system(pause); return(0); } Funo strcpy() Em C no permitido usar o operador de atribuio para copiar o contedo de uma varivel string para outra. Para realizar essa operao existe a funo strcpy() da biblioteca string.h. Esta funo utilizada para copiar o contedo de uma string para outra. A sua forma geral : strcpy( string_destino, string_origem );

75

Algoritmos / Linguagem C Prof. Dr. Antnio Marcos SELMINI

A string_origem copiada na string_destino. Exemplo: #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char str1[100], str2[100], str3[100]; printf (Entre com uma string: ); gets (str1); strcpy (str2, str1); /* Copia str1 em str2 */ strcpy (str3, Voce digitou a string ); printf (\n\n%s%s,str3,str2); system(pause); return(0); } No programa exemplo acima, a string informada via teclado armazenada na varivel str1. Em seguida, o contedo de str1 copiado para a varivel str2 usando a funo strcpy(). Perceba que neste caso teremos duas variveis com o mesmo contedo. Caso a varivel str2 tenha um contedo inicial, este ser substitudo. Funo strcat() Esta funo utilizada para concatenar duas strings, ou seja, o contedo de uma string adicionado ao final de outra string. A funo strcat() est na biblioteca string.h. A forma geral da funo : strcat( string_destino, string_origem ); A string de origem permanecer inalterada e ser anexada ao fim da string de destino. Exemplo: #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char str1[100], str2[100]; printf (Entre com uma string: ); gets (str1); strcpy (str2,Voce digitou a string ); strcat (str2, str1); printf (\n\n%s,str2); system(pause); return(0); }

76

Algoritmos / Linguagem C Prof. Dr. Antnio Marcos SELMINI

Funo strcmp() Esta funo utilizada para comparar alfabeticamente duas strings, uma vez que o operador relacional de igualdade no pode ser aplicado a variveis do tipo string. O retorno desta funo um valor inteiro tendo o seguinte significado: < 0 (se a primeira string alfabeticamente menor do que a segunda string), 0 (se as string so alfabeticamente iguais) ou > 0 (se a primeira string alfabeticamente maior do que a segunda string). A forma geral da funo strcmp() : strcmp( string1, string2 ); A tabela abaixo mostra exemplos da utilizao da funo strcmp() (Exemplo tirado do livro Linguagem C Luis Damas Editora LTC 10 Edio 2007):

Invocao
strcmp(abc, abxpo) strcmp(beatriz, carlos) strcmp(carlos, carla) strcmp(carlos, beatriz) strcmp(mario, maria) strcmp(maria, mariana) strcmp(, ) strcmp(ola, ola)

Resultado
<0 <0 >0 >0 >0 <0 0 0

Observaes
c < x b < c o > a c > b o > a A 1 string alfabeticamente menor do que a 2 As string so iguais As string so iguais

A funo strcmp() distingue os caracteres entre maisculo e minsculo retornando valores diferentes caso isso acontea. Uma opo utilizar a funo strcmpi() que executa a mesma funo mas ignorando caracteres maisculos e minsculos. #include <stdio.h> #include <string.h> #include <string.h> int main() { char str1[100], str2[100]; printf(Entre com uma string: ); gets( str1 ); printf(\n\nEntre com outra string: ); gets( str2 ); if(strcmp(str1,str2)) printf(\n\nAs duas strings so diferentes.); else printf(\n\nAs duas strings so iguais.); system(pause); return(0); }

77

Algoritmos / Linguagem C Prof. Dr. Antnio Marcos SELMINI

Outras funes de manipulao de string e caracteres


strchr(): funo utilizada para procurar por um caractere em uma string. A funo recebe como parmetro uma string e um caractere. Essa funo retorna um ponteiro para a primeira ocorrncia do caractere na string. Caso o caractere no esteja na string retornado o valor NULL (0). Exemplo: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char nome[100], ch, *ch2; printf("Qual o nome? -> "); gets(nome); printf("Qual o caractere? -> "); ch = getchar(); ch2 = strchr(nome, ch); if(ch2) puts("o caractere est na string"); else puts("o caractere no est na string"); system(pause); return(0); } strstr(): funo utilizada para localizar uma string (substring) dentro de outra string. A funo recebe como parmetro duas string e retorna um ponteiro para o incio da ocorrncia da segunda string dentro da primeira, passada como parmetro. Exemplo: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char s1[] = "linguagem de desenvolvimento c"; char s2[] = "agem", *pt; pt = strstr(s1, s2); if(pt) printf("%s esta na string", pt); else puts("a substring nao foi localizada"); system(pause); return(0); }

78

Algoritmos / Linguagem C Prof. Dr. Antnio Marcos SELMINI

strlwr(): converte todos os caracteres da string para minsculo. Exemplo: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char s1[] = "Linguagem de Desenvolvimento C"; strlwr(s1); puts(s1); system(pause); return(0); } strupr(): converte todos os caracteres da string para maisculo. Exemplo: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char s1[] = "Linguagem de Desenvolvimento C"; strupr(s1); puts(s1); system(pause); return(0); }

7.3 Exerccios em Classe


1. Escreva um programa em C que leia uma string (no mximo 50 caracteres) via teclado e informe a quantidade de letras a presentes na string (podendo ser maiscula ou minscula). 2. Escreva um programa em C que conte o nmero de vogais presentes em uma string informada via teclado por um usurio. Observao: as letras podem estar grafadas em caixa alta ou caixa baixa. 3. Escreva um programa em C que leia uma string (no mximo 30 caracteres) via teclado. Inverta a string e armazene em outra varivel. Imprima as duas strings no vdeo. 4. Usando a tabela de cdigos ASCII, responda o que est escrito na propaganda abaixo: char msg[] = {69,83,84,65,77,79,83,32,67,79,78,84,82,65,84,65,78,68,79,\0};

79

Algoritmos / Linguagem C Prof. Dr. Antnio Marcos SELMINI

Tabela ASCII American Standard Code for Interchange Information Char Dec Char Dec Char Dec Char Dec 0 32 64 96 NUL ^@ SPACE @ 1 33 65 97 ^A ! A a 2 34 66 98 ^B B b 3 35 67 99 ^C # C c 4 36 68 100 ^D $ D d 5 37 69 101 ^F % E e 6 38 70 102 ^F & F f 7 39 71 103 ^G G g 8 40 72 104 ^H ( H h 9 41 73 105 TAB ^I ) I i 10 42 74 106 ^J * J j 11 43 75 107 ^K + K k 12 44 76 108 ^L , L l 13 45 77 109 ^M M m 14 46 78 110 ^N . N n 15 47 79 111 ^O / O o 16 48 80 112 ^P 0 P p 17 49 81 113 ^Q 1 Q q 18 50 82 114 ^R 2 R r 19 51 83 115 ^S 3 S s 20 52 84 116 ^T 4 T t 21 53 85 117 ^U 5 U u 22 54 86 118 ^V 6 V v 23 55 87 119 ^W 7 W w 24 56 88 120 ^X 8 X x 25 57 89 121 ^Y 9 Y y 26 58 90 122 ^Z : Z z 27 59 91 123 ^[ ; [ { 28 60 92 124 ^| < \ | 29 61 93 125 ^] = ] } 30 62 94 126 ^^ > ^ ~ 31 63 95 127 ^_ ? _ del

5. Faa um programa em C que leia uma palavra pelo teclado e faa a impresso conforme o exemplo a seguir para a palavra AMOR AMOR AMO AM A

80

Algoritmos / Linguagem C Prof. Dr. Antnio Marcos SELMINI

6. Faa um programa em C que leia uma palavra pelo teclado e faa a impresso conforme o exemplo a seguir para a palavra AMOR A AM AMO AMOR 7. Escreva um programa em C que leia uma string e tambm um caractere. O seu programa dever apagar todas as ocorrncias do caractere informado na string. Observao: apagar no substituir. 8. Escreva um programa em C que leia apenas uma palavra (dica: use a funo scanf() para ler a string). Gerar uma nova string que ser a string lida contendo um espao em branco aps cada caractere. 9. Uma string considerada um palndromo se quando lida da esquerda para a direita e da direita para a esquerda apresentam o mesmo valor. Por exemplo: ANA. Escreva um programa em C em que o usurio possa digitar vrias palavras e informe se so palndromos ou no. A cada palavra informada pergunte ao usurio se ele deseja continuar a execuo do programa. 10. Escreva um programa em C que leia uma string via teclado. Converta os caracteres para minsculo e informe a quantidade de caracteres que tem cdigo ASCII par. 11. Escreva um programa em C que solicite o nome do usurio do sistema. O seu programa ir gerar uma senha que formada apenas pelos caracteres das posies mpares mais a soma do cdigo ASCII dos caracteres nas posies pares.

7.4 Exerccios Complementares


1. Faa um programa em C que leia quatro strings pelo teclado. Depois, concatene todas as strings lidas em uma nica varivel. Imprima as strings concatenadas no vdeo. 2. Faa um programa em C que leia uma palavra pelo teclado e informe a quantidade de caracteres que no so vogais. 3. Escreva um programa em C que leia uma palavra fornecida pelo teclado e em seguida imprima o caractere presente no meio da palavra, caso esta tenha um nmero mpar de caracteres. Como exemplo, considere a palavra SONHO. O caractere a ser impresso ser o N. 4. Escreva um programa em C que leia uma string e tambm um caractere. O seu programa dever contar o nmero de ocorrncias do caractere lido na string. 5. Escreva um programa em C que leia uma string. O seu programa dever contar o nmero de dgitos (0 9) presentes na string. Para resolver esse exerccio utilize a funo isdigit(char c) da biblioteca ctype.h. Se o caractere passado para a funo isdigit() for um dgito a funo retornar um valor diferente de zero (valor verdadeiro em C).

81

Algoritmos / Linguagem C Prof. Dr. Antnio Marcos SELMINI

6. Escreva um programa em C que leia uma string. O seu programa dever contar o nmero de caracteres alfabticos da string. Dica: usar a funo isalpha(char c) da biblioteca ctype.h. A funo retornar um valor diferente de zero (valor verdadeiro em C) caso o caractere passado para a funo isalpha() for uma letra (A at Z ou a at z). 7. Escreva um programa em C que leia uma string via teclado. Em seguida, transforme a string lida em vazia, ou seja, a string dever ficar em branco (sem nenhum caractere). 8. Escreva um programa em C que leia uma string e tambm um caractere. O programa dever imprimir no vdeo a posio em que se encontra a ltima ocorrncia do caractere na string. Caso o caractere no esteja na string dever ser impresso no vdeo o valor -1. 9. Escreva um programa em C que leia uma string via teclado e retorne o valor do maior caractere ASCII presente na string. Caso a string esteja vazia retornar o caractere 0 (\0). 10. Escreva um programa em C que leia nomes completos do teclado e os escreva na tela no formato Sobrenome, Nome sem Sobrenome. Exemplos: Nome Antnio Marcos Selmini Sada no vdeo Selmini, Antnio Marcos Nome Catarina Silva Sada no vdeo Silva, Catarina Observaes: i) a primeira letra de cada palavra deve estar grafada em maiscula; ii) o processamento termina quando o usurio digitar Sair. 11. Escreva um programa em C que leia uma string (no mximo 100 caracteres) via teclado e informe a quantidade de palavras presentes na string.