Escolar Documentos
Profissional Documentos
Cultura Documentos
A linguagem C no possui um tipo especfico de dados Strings. Para fazer uma string, o C utiliza um vetor de caracteres, onde cada posio do vetor representa uma letra. importante lembrar que a linguagem C identifica o fim de uma cadeia por meio do caracter nulo (\0). Sendo assim, para termos uma string, sempre temos que ter uma posio a mais de tamanho no vetor para este caracter no final. Por exemplo, para armazenarmos a palavra CADEIA, temos que declarar um vetor do tipo char com sete posies, e elas ocuparo posies seqenciais na memria.
Cdigo-fonte
char palavra [7];
0 C 863
1 A 864
2 D 865
3 E 866
4 I 867
5 A 868
6 \0 869
Cdigo-fonte
printf(%c, palavra[3]);
na
Inicializao de Strings
As variveis que armazenam sequncias de caracteres (strings) em C devem ser inicializadas de forma diferente das variveis comuns, como int, float, etc. (onde utilizamos apenas o sinal de = para sua inicializao). Os tipos particulares de inicializaes de Strings so: Inicializao por meio de atribuio Esta a forma tradicional de inicializao, que foi demonstrada nos exemplos acima, onde utilizamos a funo strcpy para atribuir o valor inicial a uma string. Por exemplo:
Cdigo-fonte
char vet1[10], vet2[10]; strcpy (vet1, String1); strcpy (vet2, vet1);
Inicializao no momento da declarao Com esse mtodo de inicializao, podemos declarar uma string sem preocuparmos com seu tamanho, atribuindo uma quantidade de caracteres que sero utilizadas no vetor. Lembrando que, aps esse tipo de atribuio, para o resto do programa a varivel ter sempre o tamanho fixo do nmero de letras atribudo. Por exemplo:
Cdigo-fonte
char nome[] = {M, e, u, , T, e, x, t, o, \0}; char nome[] = Meu texto;
Nos dois casos, aps a inicializao, a varivel nome possui o tamanho 9. Inicializao por meio do teclado Essa inicializao feita pelo clssico scanf utilizado at hoje em nossos exerccios, onde o usurio utiliza o teclado para informar quais sero os caracteres que estaro armazenados.
Cdigo-fonte
char nome[40] ... printf(Digite o nome: ); scanf(%s, &nome);
Observao: Para imprimir o contedo de uma string podemos utilizar a funo puts da biblioteca string ao invs do printf. Exemplo:
Cdigo-fonte
puts(nome); //mostra printf(%s,nome); o contedo da string nome na tela, equivalente a
Manipulao de Strings
Para trabalharmos com esses vetores especiais que chamamos de Strings precisaremos incluir a biblioteca string.h. strcpy (str1, str2) Esta funo utilizada para copiar o contedo de uma string em outra. A primeira string ter o mesmo valor da segunda string. Podemos tambm colocar uma string qualquer entre aspas ao invs de uma varivel no lugar do parmetro str2.
Importante lembrar que o tamanho do parmetro str2 deve ter no mximo o mesmo tamanho do parmetro str1. O parmetro Str2 pode ser menor, nunca maior que o parmetro str1. Mesmo no caso de colocarmos uma string manualmente (fazer uma cpia sem utilizarmos o parmetro str2 como uma varivel, demonstrado no exemplo abaixo) no podemos ultrapassar o tamanho de str1 menos 1. Exemplo:
Cdigo-fonte
#include<stdio.h> #include<string.h> main() { char str1[40], str2[40]; strcpy(str2, "TESTE INICIAL "); strcpy(str1, str2); printf("%s", str1); printf("\n%s", str2); }
Resultado tela
na
strcat (str1,str2) Esta funo utilizada para concatenar (unir / juntar) duas strings. A segunda string ser adicionada no final da primeira string indicada. Lembre-se que a soma dos valores de caracteres da str1 + str2 no podem exceder o tamanho da str1. Podemos tambm substituir str2 por um conjunto de caracteres manualmente, como no exemplo do strcpy. Exemplo:
Cdigo-fonte
#include<stdio.h> #include<string.h> main() { char str1[20], str2[10]; strcpy(str1, "HELICO"); strcpy(str2, "PITERO"); strcat(str1, str2); printf("%s", str1); }
Resultado tela
HELICOPITERO
na
strchr (str1, ch) Esta funo utilizada para procurar a posio da primeira ocorrncia do caracter ch em uma string. Ou seja, a funo retorna qual posio dentro de uma string a letra especificada em ch se encontra (a primeira ocorrncia caso haja repeties). A funo retorna um ponteiro para a posio de memria. Para termos
o valor exato, precisamos subtrair o valor da string multiplicado por -1. Veja o exemplo:
Cdigo-fonte
#include<stdio.h> #include<string.h> main() { char str1[50], ch; strcpy(str1, "Procura uma letra inicial de caracteres"); ch = 'l'; printf("%d", -(str1-strchr(str1,ch))); }
Resultado tela
12
na
strcmp (str1,str2) Esta funo utilizada para comparar se o contedo de str2 igual ao contedo de str1. Nesse caso, a funo retorna o valor 0 (zero) se as duas cadeias forem iguais, um valor menor que zero se str1 for alfabeticamente menor que str2 ou um valor maior que zero se str1 for alfabeticamente maior que str2. Esta funo diferencia maisculas de minsculas. Exemplo:
Cdigo-fonte
#include<stdio.h> #include<string.h> main() { char str1[50], str2[50], str3[50]; strcpy(str1, "Procura uma letra inicial de caracteres"); strcpy(str2, "Procura uma letra inicial de caracteres"); strcpy(str3, "Cadeia diferente"); printf("%d\n", strcmp(str1,str2)); printf("%d\n", strcmp(str1,str3)); printf("%d\n", strcmp(str2,str3)); printf("%d\n", strcmp(str3,str1)); printf("%d\n", strcmp(str2,str1)); }
Resultado tela
0 13 13 -13 0
na
stricmp (str1,str2) Esta funo utilizada para comparar se o contedo de str2 igual ao contedo de str1. Nesse caso, a funo retorna o valor 0 (zero) se as duas cadeias forem iguais, um valor menor que zero se str1 for alfabeticamente menor que str2 ou um valor maior que zero se str1 for alfabeticamente maior que str2. Esta funo no diferencia maisculas de minsculas. Exemplo:
Cdigo-fonte
#include<stdio.h> #include<string.h> main() { char str1[50], str2[50], str3[50]; strcpy(str1, "Procura uma letra inicial de caracteres"); strcpy(str2, "PROCURA UMA LETRA INICIAL DE CARACTRES"); strcpy(str3, "Cadeia diferente"); printf("%d\n", stricmp(str1,str2)); printf("%d\n", stricmp(str1,str3)); printf("%d\n", stricmp(str2,str3)); printf("%d\n", stricmp(str3,str1)); printf("%d\n", stricmp(str2,str1)); }
Resultado tela
0 13 13 -13 0
na
strlen (str1) Esta funo retorna o tamanho (quantidade de letras) de uma string, desprezando o caractere nulo final (\0). Ela retorna o valor exato de caracteres. Exemplo:
Cdigo-fonte
#include<stdio.h> #include<string.h> main() { char str1[50]; strcpy(str1, "Procura uma letra inicial de caracteres"); printf("%d", strlen(str1)); }
Resultado tela
39
na
strstr (str1,str2) Esta funo retorna um ponteiro que aponta para uma string dentro de uma string. Em outras palavras, ela retorna a posio de memria em uma varivel de memria que mostra onde comea uma possvel repetio de str2 dentro de str1. Se no houver repetio, ela retorna o caracter nulo (\0) Exemplo:
Cdigo-fonte
#include<stdio.h> #include<string.h> main() { char str1[40], str2[40]; char *ptr; strcpy(str1, "Eu adoro programar em C"); strcpy(str2, "programar");
strupr(str) A funo strupr converte uma string para maisculas. Esta funo toma uma nica string como argumento: strupr (string); Essa funo afeta apenas os caracteres alfabticos contidos na string, excluindo dgitos ou caracteres de pontuao. A funo devolve um valor string especificado. Exemplo:
Cdigo-fonte #include <stdio.h> #include <string.h> main() { char string1[] = O rato roeu a roupa do rei de roma; printf("\nA string em maiuscula e: %s", strupr(s)); } Resultado tela na
strlwr(str) A funo strlwr converte uma string para minsculas. A funo toma uma nica string como argumento: strlwr (string); Essa funo afeta apenas os caracteres alfabticos contidos na string, excluindo dgitos ou caracteres de pontuao. A funo devolve um valor string especificado.
Cdigo-fonte #include <stdio.h> #include <string.h> main() { char string1[] = O RATO ROEU A ROUPA DO REI DE ROMA; printf("\nA string em minuscula e: %s", strlwr(s)); } Resultado tela na
toupper(caracter) e tolower(caracter)
A linguagem C tambm suporta funes que convertem em caracteres individuais em maisculos e minsculos. Essas funes, chamadas toupper e tolower, so declaradas no arquivo de cabealho ctype.h. Ambas pegam um
nico caracter como argumento e devolvem o equivalente maisculo ou minsculo: toupper(caracter); tolower(caracter);
Cdigo-fonte #include <stdio.h> #include <ctype.h> main () { printf("tolower(A) = %c\n, tolower('A')); printf("toupper(a) = %c, toupper('a')); } Resultado tela na
tolower(A) = a toupper(a) = A
Exerccio Resolvido
Contagem de vogais
A funo abaixo conta o nmero de vogais em uma string. A funo conta apenas as vogais no acentuadas, mas muito fcil modificar o cdigo para que todas as vogais sejam contadas.
Cdigo-fonte
int contaVogais (char s[]) { int numVogais; char *vogais; vogais = "aeiouAEIOU"; numVogais = 0; for (int i = 0; s[i] != '\0'; ++i) { char ch = s[i]; for (int j = 0; vogais[j] != '\0'; ++j) { if (vogais[j] == ch) { numVogais += 1; break; } //fechamento do if } //fechamento do for (int j = 0 ... } //fechamento do for (int i = 0 ... return numVogais; } //fechamento da funo contaVogais
Exerccios Strings
1) Faa um programa em C que receba uma frase qualquer fornecida pelo usurio, calcule e mostre quantas palavras a frase possui. 2) Faa um programa em C que receba uma frase e troque as vogais existentes nesta frase por um asterisco (*). Por exemplo: Frase EU ESTOU NA ESCOLA resultado na tela ** *ST** N* *SC*L* 3) Faa um programa em C que se comporte como um vrus. Este programa ir duplicar as palavras digitadas em uma frase. 4) Faa um programa em C que receba uma frase do usurio e mostre a frase, palavra por palavra, uma em cada linha diferente. 5) Faa um programa em C que receba uma frase, inverta a frase letra a letra, da ltima para a primeira, e mostre esta frase ao final.