Você está na página 1de 8

Strings em C

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];

ndice Valor Memri a

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 tela apareceria a letra E.


Resultado tela
E

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);

Podemos ainda utilizar a funo gets da biblioteca string ao invs do scanf.


Cdigo-fonte
char nome[40] ... printf(Digite o nome: ); gets(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

TESTE INICIAL TESTE INICIAL

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");

ptr = strstr(str1, str2); printf("A repeticao e: %s\n", ptr); }

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

A string em maiuscula e: O RATO ROEU A ROUPA DO REI DE ROMA

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

A string em minuscula e: o rato roeu a roupa do rei de roma

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.

Você também pode gostar