Académique Documents
Professionnel Documents
Culture Documents
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
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(); }
Estas so apenas algumas das muitas funes que manipulam strings. Tadeu Freire Pontes
13
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"); } } }