Vous êtes sur la page 1sur 16

Manipulao de STRINGS

Introduo
Cadeia de C d i d caracteres - strings t ti
Uma string uma cadeia de caracteres, isto um conjunto de caracteres numricos ou alfanumricos alfanumricos. String uma matriz do tipo char terminada pelo caractere null (\0). Como uma matriz um conjunto de dados de mesmo tipo e string uma srie d caracteres, possvel d fi i uma string como uma matriz. i de t l definir ti ti Cada caractere de uma string pode ser acessado como um elemento de uma matriz do tipo char, o que facilita e flexibiliza programas que processam textos. t t Strings constantes Sempre que o compilador encontra qualquer contedo entre aspas p q p q q p duplas, ele reconhece que se trata de uma string constante, isto , os caracteres entre aspas mais o caractere null (\0). Ex.: Imagine que o compilador encontrasse uma instruo com a seguinte sintaxe: printf( %s Saudaes! ); printf(%s, Saudaes!); Ele imprimiria a palavra Saudaes! ou seja, a string constante.

Complemento
Entendendo melhor
Cada caractere de uma string ocupa 1 byte de memria e o ltimo caractere sempre o caractere \0 (null) O caractere null ou \0 (null). \0 tem o valor 0 (zero) decimal. Note que isto no o mesmo que o caractere 0 que tem valor 48 decimal.
Exemplo:
Endereo de memria 1449 1450 1451 1452 ... 1459 1460 String S a u ... s ! \0

Declarando uma string


Quando se declara uma string, ela tem o significado de uma varivel, apenas uma varivel que o contedo um conjunto de caracteres. Sintaxe: <tipo de dado> <identificador ou nome> <[limite]> Exemplo.: char cad[15] Ad l declarao acima d fi um conjunto d 15 posies d memria, i define j de i de i cada uma delas de 1 byte, capazes de armazenar variveis do tipo char, isto , tem-se uma string ou vetor de 15 posies. A linha do scanf l cada caractere no f Exemplo.: E l branco e os armazena a partir do endereo #include <stdio.h> nome. O processo termina quando um #include <string.h> caractere branco encontrado. Neste main () ponto includo automaticamente o { caractere null. Como nome, aqui, tem char nome[15]; limite 15, s se poderia digitar at 14 printf( Digite printf(Digite seu nome:); nome: ); caracteres, deixando uma posio livre scanf(%s, nome); para o caractere null. ATENO:no se printf (Saudaes, %s.,nome); utilizou o operador &( comercial), } porque o nome de uma matriz o seu i endereo inicial. &nome[0]=nome

Uma string e funo scanf()


A utilizao se scanf() para ler uma string extremamente limitada, como se viu anteriormente, porque ao encontrar o espao em branco null, o compilador entende como sendo o fim da string. Isso se percebe quando se digita o nome com o sobrenome, sobrenome ao encontrar o espao em branco da barra de espao, ele s guarda espao espao o prenome e abandona o sobrenome.

Uma string e a funo gets()


Desenvolve a mesma funo da funo scanf(), isto , ler uma string da sua entrada padro que por default o teclado. Como uma string no tem um tamanho predeterminado, gets() l caracteres at encontrar o de nova linha (\n) que gerado quando se pressiona a tecla [enter]. Todos os caracteres anteriores ao \n so armazenados na string, inclusive espaos e tabulaes, depois includo o caractere \0. p , p
Exemplo:
#include <stdio.h> #include <string.h> main () { char nome[15]; printf( Digite printf(Digite seu nome:); nome: ); gets( nome); printf (Saudaes, %s.,nome); }

Uma string e a funo puts()


A funo puts() o complemento da funo gets(). A funo puts() serve para imprimir uma string de cada vez. O endereo da string mandado para puts() como argumento da funo. Exemplo: #include <stdio.h> #include <stdlib.h> int i () i t main() { char nome[15]; printf("Digite seu nome:"); f( ) gets(nome); puts("Saudaces, "); puts(nome); puts("puts() pula de posio no endereo sozinha"); p ( puts(nome); ); puts(&nome[5]); system("PAUSE"); return 0; }

UTILIZANDO STRING(s)
Outras Funes de Manipulao de String
Diferentes compiladores oferecem em suas bibliotecas funes para oferecem, bibliotecas, manipular strings. Vejamos algumas das principais. As funes para manipulao de strings a seguir apresentadas, so disponibilizadas por meio da incluso da diretiva #include string.h.

A funo strlen()
A funo strlen(), aceita um endereo de string como argumento e retorna o tamanho da string armazenada a partir deste endereo at um caractere antes do \0. strlen(x) p Exemplo: O exemplo a seguir mostra cada posio de memria ocupada pela string e imprime o que nela encontrou. retorna o tamanho da string armazenada, sem \0.

#include <stdio h> <stdio.h> #include <string.h> #include <conio h> <conio.h> main() { char nome[15]; int d; puts("Digite seu nome"); gets(nome); for(d=0;d<strlen(nome) + 4;d++)

Imprimimos 4 caracteres a mais, alm d d I i i t i l dos da string, para mostrar o que tem depois. O primeiro o caractere null, que no impresso pois tem valor zero Os outros so caracteres zero. considerados lixos que podem ter qualquer valor dependendo do que o computador armazenou naquelas posies Se tivssemos declarado a posies. matriz como sendo static ou extern estes espaos teriam 0 armazenado em vez de lixo.

printf( end printf("end = %u caractere = '%c' = %3d\n", &nome[d] nome[d] nome[d]); %c %3d\n &nome[d],nome[d],nome[d]); printf(" %d ", strlen(nome)); /*no conta o caractere null*/ getch(); }

A funo strcat()
Af funo strcat() concatena d () duas string, i j i isto , junta uma string a fi l i final de outra. Ela toma dois endereos de strings como argumento e copia a segunda string no final da primeira e esta combinao gera uma nova primeira string. A segunda string no alterada. ATENO esta f no verifica se a segunda d ti lt d ATENO: t funo ifi d string cabe no espao livre da primeira string. Certamente pode-se utilizar a funo strlen() antes de us-la. Exemplo:
#include <stdio.h> #include <string.h> string.h #include <conio.h> main() { static char gentileza[50]="Saudacoes, "; char nome[20]; puts("Digite seu nome"); t ("Di it ") gets(nome); puts(strcat(gentileza,nome)); getch(); }

A funo strcmp()
A funo strcmp() utilizada para comparar contedo de strings e no seus endereos. Exemplo: comparando resposta do usurio com uma string interna.
#include <stdio.h> #include <string.h> #include <conio.h> main() { static char resp[] = branco"; p[] char resp1[40]; puts(Qual eh a cor do cavalo branco de Napoleao?"); gets(resp1); while (resp1 != resp) { pusts( Resposta errada. pusts(Resposta errada Tente novamente ); novamente. ); gets(resp1); } puts(Correto!); t (C t !) getch(); }

A resposta ser sempre errada, uma vez que resp1 e resp so endereos, logo, estes endereos sero sempre g , p diferentes entre si. Isso ocorre porque a pergunta que o exemplo responde no sobre o a igualdade dos contedos das strings e sim se os endereos so diferentes.

A funo strcmp()
Exemplo: comparando resposta do usurio com uma string interna. #include <stdio.h> #include <string.h> #include #i l d <conio.h> i h main() { static char resp[] = branco "; char resp1[40]; puts(Qual eh a cor d cavalo b t (Q l h do l branco d N l ?") de Napoleao?"); gets(resp1); while (strcmp(resp1, resp)!=0) { pusts(Resposta errada. Tente novamente.); gets(resp1); t( 1) } puts(Correto!); getch(); }

A funo strcpy() strcpy(x,y) strcpy(x y) copia uma string em outra ou seja copia y em x outra, seja,
Exemplo:
#include <stdio.h> stdio.h #include <string.h> #include <conio.h> main() { static char entrada[] = "branco"; char nome[40]; puts("Qual di it seu nome:"); t ("Q l digite ") gets(nome); strcpy(nome,entrada); strcpy(nome entrada); puts(strcpy(nome,entrada)); getch(); }

Resumo das funes com STRING(s)


Facilitando a manipulao de strings so disponibilizadas, por meio da incluso da diretiva include string.h, algumas funes que executam as seguintes operaes: strlen(x) retorna o tamanho da string armazenada, sem \0 strcat(x,y) strcat(x y) concatena na string x a string y sem alterar y y, strcmp(x,y) retorna a diferena em ASCII entre os dois primeiros caracteres diferentes ou zero para igualdade diferentes, strcpy(x,y) copia uma string em outra, ou seja, copia y em x tolower(x) retorna o minsculo da string x (include ctype.h) toupper(x) retorna o maisculo da string x (include ctype.h)
2 sem/05

Estas so apenas algumas das muitas funes que manipulam strings. Tadeu Freire Pontes

13

Funo e retorno de string


1. Imagine o exemplo que classifica tringulos quanto aos lados e quanto aos ngulos. Sabe-se que quanto aos lados o tringulo pode ser equiltero, escaleno ou issceles; quanto aos ngulos o tringulo pode ser retngulo, acutngulo ou obtusngulo. Testando as condies para os lados e quanto a soma dos ngulos internos formarem 180, classifique o tringulos quanto aos lados e 180 ngulos, sendo que a funo deve retornar a string classificatria quanto s medidas dos lados e ngulos. 2. Sabendo que em uma adega a quantidade de vinhos desconhecida, o algoritmo deve fazer um levantamento do estoque de vinhos de uma adega, tendo como dados de entrada tipos de vinho, sendo: T para tinto, B para branco e R para ros. Especifique a porcentagem de cada tipo sobre o total geral de vinhos. inhos

Soluo1
#include<stdio.h> #include<conio.h> #include<string.h> // Declaracoes void func_classifica(int x,int y,int z,char n[]); char nome[20]; int l1 l2 l3; l1,l2,l3; main() { printf("Informe os lados do triangulo:"); scanf("%d%d%d",&l1,&l2,&l3); func_classifica(l1,l2,l3,nome); printf("%s",nome); getch(); } void f id func_classifica( i t x, i t y, i t z,char n[]) l ifi ( int int int h []) { // Declaracoes char nome1[20]="equilatero",nome2[20]="escaleno",nome3[20]="isoceles"; // Intrucoes if((x==y)&&(x==z)) strcpy(n,nome1); else { if((x!=y)&&(x!=z)&&(y!=z)) if(( ! )&&( ! )&&( ! )) strcpy(n,nome2); else strcpy(n,nome3); } }

Soluo2
#include<stdio.h> #include<conio.h> #include<string.h> char func_classifica( int x, int y, int z,char n[]); main() { char nome[20]; int l1,l2,l3; printf("Informe os lados do triangulo:"); scanf("%d%d%d",&l1,&l2,&l3); func_classifica(l1,l2,l3,nome); printf("%s",nome); getch(); } char func_classifica( int x, int y, int z,char n[]) { if((x==y)&&(x==z)) { strcpy(n,"equilatero"); } else { if((x!=y)&&(x!=z)&&(y!=z)) { strcpy(n,"escaleno"); } else { strcpy(n,"isosceles"); } } }

Vous aimerez peut-être aussi