BCC 201 - Introdução à Programação I Cadeia de caracteres … · 8/1 Cadeia de caracteresVII I...
Transcript of BCC 201 - Introdução à Programação I Cadeia de caracteres … · 8/1 Cadeia de caracteresVII I...
1/1
BCC 201 - Introducao a Programacao I
Cadeia de caracteres (strings)
Guillermo Camara-ChavezUFOP
2/1
Cadeia de caracteres I
I Definicao: sao sequencias de letras, numeros ou sımbolos ondeo ultimo caracter e o caracter nulo (\0)
I Na linguagem C utilizamos vetores de tipo char paraarmazenar cadeias de caracteres.
3/1
Cadeia de caracteres II
I Por exemplo, para declarar um espaco de memoria quecontenha 20 caracteres fazemos:
char nome [ 2 0 ] ;
s c a n f (" %s" , nome ) ;
I A funcao scanf, quando utilizada com o parametro %s letodos os caracteres ate encontrar um caracter igual a espacoou fim de linha
4/1
Cadeia de caracteres III
I Este e o estilo de string usado pela linguagem C pura.
I Para manipular este tipo de string e preciso ter certo cuidado(se acessamos um endereco fora do vetor, invadiremosoutras areas da memoria).
5/1
Cadeia de caracteres IV
I Pergunta: Qual o tamanho do menor vetor que devemosdeclarar para armazenar uma cadeia de caracteres com 10letras?
6/1
Cadeia de caracteres V
I Escreva um program que le uma palavra da entrada e imprimeo numero de caracteres desta palavra
7/1
Cadeia de caracteres VI
#inc l ud e<s t d i o . h>i n t main ( ){
char v e t o r [ 1 0 0 ] ;i n t i , n ;p r i n t f ("Entre com a palavra: " ) ;s c a n f (" %s" , v e t o r ) ;i = 0 ;n = 0 ;wh i l e ( v e t o r [ i ++] != ’\0’ )
n++;p r i n t f ("O numero de caracteres eh %d" , n ) ;r e t u r n 0 ;
}
8/1
Cadeia de caracteres VII
I Funcoes Importantes (string.h)I strlen: retorna o numero de caracteres da cadeia de caracteres,
sem contar o ’\0’. Ex,
s t r l e n ("casa" )
I strcmp: compara caracter a caracter duas cadeias e retorna oresultado dessa comparacao. Retorna um valor inteiro
I = 0: ambos strings sao iguaisI > 0: o primeiro caracter que nao casa tem um valor superior
na primeira cadeiaI < 0: o primeiro caracter que nao casa tem um valor inferior na
primeira cadeia
9/1
Cadeia de caracteres VIII
I strcmp("casa", "carro") retorna 1I strcmp("casa", "casa") retorna 0I strcmp("carro", "casa") retorna -1
10/1
Cadeia de caracteres IX
I strcmpi: Compara caracter a caracter duas cadeias ignorandose as letras sao maiusculas ou minusculas, e retorna oresultado dessa comparacao. Ex.:
I strcmpi("Casa", "carro"), retorna 1I strcmpi("Casa", "cASa"), retorna 0I strcmpi("caRro", "casA"), retorna -1
I strcpy: copia uma string para dentro de outra. Ex.:
s t r c p y ( ve to r , "carro" ) ;s t r c p y ( ve to r2 , v e t o r ) ;
11/1
Cadeia de caracteres X
I strcat: concatena duas string, a primeira string recebe o seuconteudo seguido da segunda string. Ex.:
s t r c p y ( ve to r , "uva + " ) ;s t r c a t ( ve to r , "banana +" ) ;s t r c a t ( ve to r , "pera" ) ;
12/1
Cadeia de caracteres XI
I Criar a funcao que receba um string e que gere outro stringcom a ordem inversa dos caracteres. Ex “alem” deve sergerado “mela”.
13/1
Cadeia de caracteres XII
#inc l ud e<s t r i n g . h>vo i d I n v e r t e ( cha r ∗ , cha r ∗ , i n t ) ;i n t main ( ){
char cad1 [ 1 0 0 ] = "" , cad2 [ 1 0 0 ] = "" ;i n t i , j ;p r i n t f ("Inserir uma cadeia" ) ;s c a n f (" %s" , cad1 ) ;I n v e r t e ( cad1 , cad2 , 100 ) ;p r i n t f ("cadeia1: %s cadeia2: %s" , cad1 , cad2 ) ;r e t u r n 0 ;
}
14/1
Cadeia de caracteres XIII
vo i d I n v e r t e ( cha r ∗ cad , cha r ∗ cad inv , i n t tamCadInv ){
i n t n = s t r l e n ( cad ) , i , j ;i f ( n <= tamCadInv ){
f o r ( i = 0 , j = n−1; i < n ; i ++; j−−)cad i n v [ i ] = cad [ j ] ;
c ad i n v [ i ] = ’\0’ ;}
}
15/1
Cadeia de caracteres XIV
I Implementar uma funcao que crie uma copia de um string
16/1
Cadeia de caracteres XV
vo i d Copia ( cha r cadCopia [ ] , cha r cad [ ] , i n t n ) ;i n t main ( ){
char cad [ 5 0 ] , c ad cop i a [ 5 0 ] ;p r i n t f ("Inserir uma cadeia \n" ) ;s c a n f (" %s" , cad ) ;Copia ( cadCopia , cad , 5 0 ) ;p r i n t f ("cadeia: %s copia: %s" , cad , cadCopia ) ;r e t u r n 0 ;
}
17/1
Cadeia de caracteres XVI
vo i d Copia ( cha r cadCopia [ ] , cha r cad [ ] , i n t n ){
i n t tamCad = s t r l e n ( cad ) , i ;i f ( tamCad <= n){
f o r ( i = 0 ; i <= tamCad ; i++){
cadCopia [ i ] = cad [ i ] ;}
}}
18/1
Cadeia de caracteres XVII
I Criar uma funcao que elimine os espacos em branco de umacadeia de caracteres
19/1
Cadeia de caracteres XVIII
vo i d e l im i n aB ra co ( char ∗ , cha r ∗ , i n t n ) ;i n t main ( ){
char cad [ 5 0 ] , cadSem [ 5 0 ] ;p r i n t f ("Inserir uma cadeia \n" ) ;f g e t s ( cad , 50 , s t d i n ) ;e l im i naB ra co ( cadSem , cad , 5 0 ) ;p r i n t f ("cadeia: %s " , cadSem ) ;r e t u r n 0 ;
}
20/1
Cadeia de caracteres XIX
vo i d e l im i n aB ra co ( char ∗ cadSem , char ∗ cad , i n t n ){
i n t tamCad = s t r l e n ( cad ) , i , j ;j = 0 ;i f ( tamCad <= n){
f o r ( i = 0 ; i < tamCad ; i++)i f ( cad [ i ] != ’ ’ )
cadSem [ j++] = cad [ i ] ;}cadSem [ j ] = ’\0’ ;
}
21/1
Cadeia de caracteres XX
I Criar as funcoes, LEFT e RIGHT, que retornem a subcadeiade n elementos a partir da esquerda e da direitarespectivamente. Ex cad = “transformar”. Mostrar os 3primeiros caracteres a partir da esquerda: “tra”. Mostrar os 5primeiros caracteres a partir da direita: “ormar”.
22/1
Cadeia de caracteres XXI
vo i d L e f t ( cha r c adLe f t [ ] , cha r cad [ ] , i n t n ) ;v o i d R ight ( cha r cadR ight [ ] , cha r cad [ ] , i n t n ) ;i n t main ( ){
char cad1 [ 5 0 ] , cadR ight [ 5 0 ] , c adLe f t [ 5 0 ] ;p r i n t f ("Inserir cadeia: " ) ;s c a n f (" %s" , cad1 ) ;L e f t ( cadLe f t , cad1 , 4 ) ;R ight ( cadRight , cad1 , 4 ) ;p r i n t f ("Right %s \n" , cadR ight ) ;p r i n t f ("Left %s \n" , c adLe f t ) ;r e t u r n 0 ;
}
23/1
Cadeia de caracteres XXII
vo i d L e f t ( cha r c adLe f t [ ] , cha r cad [ ] , i n t n ){
i n t tamCad = s t r l e n ( cad ) , i ;i f ( n <= tamCad ){
f o r ( i = 0 ; i < n ; i++)cadLe f t [ i ] = cad [ i ] ;
c adLe f t [ i ] = ’\0’ ;}
}
24/1
Cadeia de caracteres XXIII
vo i d R ight ( cha r cadR ight [ ] , cha r cad [ ] , i n t n ){
i n t tamCad = s t r l e n ( cad ) , i , j ;i f ( n <= tamCad ){
j = tamCad−n ;f o r ( i = 0 ; i < n ; i ++, j++)
cadRight [ i ] = cad [ j ] ;cadR ight [ i ] = ’\0’ ;
}}
25/1
Cadeia de caracteres XXIV
I O metodo substr(ini_pos, numCaract) da classe stringem C++ extrai uma subcadeia de dimensao numCaract apartir da posicao ini_pos. Por exemplo,
s t r i n g p a l a v r a = "a maioria voltara" ;cad = pa l a v r a . s u b s t r (2 , 7 ) ;
A variavel cad contem a cadeia “maioria”.Dita funcao nao esta implementada na linguagem C.Implementar a funcao que execute essa mesma operacao.
26/1
Cadeia de caracteres XXV
vo i d s u b s t r ( cha r subcad [ ] , cha r cad [ ] , i n t i n i , i n t n ) ;i n t main ( ){
char cad [ 5 0 ] , cadSem [ 5 0 ] ;p r i n t f ("Inserir uma cadeia \n" ) ;g e t s ( cad ) ;s u b s t r ( cadSem , cad , 2 , 4 ) ;p r i n t f ("cadeia: %s " , cadSem ) ;r e t u r n 0 ;
}
27/1
Cadeia de caracteres XXVI
vo i d s u b s t r ( cha r subcad [ ] , cha r cad [ ] , i n t i n i , i n t n ){
i n t tamCad = s t r l e n ( cad ) , i , j = 0 ;i f ( i n i+n−1 < tamCad ){
f o r ( i = i n i ; i <= i n i+n−1; i++)subcad [ j++] = cad [ i ] ;
}subcad [ j ] = ’\n’ ;
}
28/1
Cadeia de caracteres XXVII
Determinacao da primeira ocorrencia de uma subcadeia em umacadeia.
29/1
Cadeia de caracteres XXVIII
30/1
Cadeia de caracteres XXIX
31/1
Cadeia de caracteres XXX
32/1
Cadeia de caracteres XXXI
33/1
Cadeia de caracteres XXXII
34/1
Cadeia de caracteres XXXIII
35/1
Cadeia de caracteres XXXIV
36/1
Cadeia de caracteres XXXV
37/1
Cadeia de caracteres XXXVI
38/1
Cadeia de caracteres XXXVII
39/1
Cadeia de caracteres XXXVIII
40/1
Cadeia de caracteres XXXIX
41/1
Cadeia de caracteres XL
42/1
Cadeia de caracteres XLI
43/1
Cadeia de caracteres XLII
44/1
Cadeia de caracteres XLIII
45/1
Cadeia de caracteres XLIV
46/1
Cadeia de caracteres XLV
47/1
Cadeia de caracteres XLVI
48/1
Cadeia de caracteres XLVII
49/1
Cadeia de caracteres XLVIII
50/1
Cadeia de caracteres XLIX
51/1
Cadeia de caracteres L
52/1
Cadeia de caracteres LI
53/1
Cadeia de caracteres LII
54/1
Cadeia de caracteres LIII
55/1
Cadeia de caracteres LIV
i n t Es taCont ida ( char cad [ ] , cha r subcad [ ] ) ;i n t main ( ){
char cad1 [ 5 0 ] , cad2 [ 5 0 ] ;p r i n t f ("Inserir cadeia e subcadeia: " ) ;s c a n f (" %s %s" , cad1 , cad2 ) ;i f ( Es taCont ida ( cad1 , cad2 ) )
p r i n t f ("subcadeia contida" ) ;r e t u r n 0 ;
}
56/1
Cadeia de caracteres LV
i n t Es taCont ida ( char cad [ ] , cha r subcad [ ] ) {i n t tamCad1 , tamCad2 , i , j , cont ;tamCad1 = s t r l e n ( cad ) ;tamCad2 = s t r l e n ( subcad ) ;i f ( tamCad2 <= tamCad1 ){
f o r ( i = 0 ; i < tamCad1−tamCad2 ; i++){
f o r ( j = 0 , cont = 0 ; j < tamCad2 ;j++, cont++)
{i f ( cad [ i+j ] != subcad [ j ] )
b reak ;}i f ( cont == tamCad2 )
r e t u r n 1 ;}
}r e t u r n 0 ;
}
57/1
FIM