Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Manual de Algoritmos e Programação de Computadores - MC102 - UNICAMP, Provas de Algoritmos

Documento contendo objetivos, motivações, definições e exemplos sobre manipulação de cadeias de caracteres em c, incluindo leitura e escrita, conversão entre números e strings e uso de funções da biblioteca string.h.

Tipologia: Provas

2022

Compartilhado em 07/11/2022

Salamaleque
Salamaleque 🇧🇷

4.5

(113)

221 documentos

1 / 6

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
MC102 ALGORITMOS E PROGRAMAC¸ ˜
AO DE
COMPUTADORES
Instituto de Computac¸ ˜
ao UNICAMP
1o
¯Semestre de 2005
Aula 18 - Cadeias de caracteres
1 Objetivos
Apresentar e conceituar as cadeias de caracteres (strings), mostrar seu uso como vetores e mostrar fun¸oes
de biblioteca para manipula¸ao destas cadeias.
2 Motiva¸ao
Fazer programas que manipulem texto, por exemplo buscar palavras em um dicion´ario, ordenar palavras,
etc.
3 Defini¸ao de uma cadeia de caracteres
Uma cadeia de caracteres, mais conhecida como string, ´e uma sequˆencia de letras e ımbolos, onde os ımbolos
podem ser espa¸cos em branco, d´ıgitos e arios outros como pontos de exclama¸ao e interroga¸ao, simbolos
matem´aticos, etc. Em C, uma cadeia de caracteres ´e representada por um vetor de vari´aveis do tipo char e
´e terminada com o marcador ’\0’.
/D ef i ni n do e i n i c i a l i z a n d o uma ca d e ia de c a r a ct e r e s /
cha r te x t o [1 0 0 ] = Ol a Mondo ! ;
/Como ´e um v e to r , p os s o c o r r i g i r o c a r a c t e r e e r r a do da p os i ¸c ˜ao 5 /
t e x t o [ 5 ] = u ;
4 Mostrando e lendo uma cadeia de caracteres
A sequˆencia especial %s deve ser usada nos comandos printf escanf para mostrar ou ler uma string,
respectivamente.
/Pa ra m os t ra r n a t e l a t o d o o t e x t o a rm aze na do n a v a r i ´a v e l t e x t o /
p r i n t f ( ”%s , te x t o ) ;
/Pa ra l e r um t e x t o do t e c l a d o /
/( a s e q u ˆe n ci a %s a p l i c a d a ao sc a n f l ˆe s o me nt e uma p a l a v r a ) /
s c a n f ( ”%s , te x t o ) ;
5 Convertendo cadeias de caracteres em umeros e vice-versa
Existem varia¸oes dos comandos printf escanf que ao inv´es de escrever na tela ou ler do teclado, eles
escrevem/lˆeem de uma string. Os comandos em um s(de string) na frente, portanto, ao os comandos
sprintf esscanf. Estas varia¸oes funcionam de forma similar ao printf escanf, a ´unica diferen¸ca ´e que
recebem como primeiro argumento a string que vai ser escrita ou lida.
1
pf3
pf4
pf5

Pré-visualização parcial do texto

Baixe Manual de Algoritmos e Programação de Computadores - MC102 - UNICAMP e outras Provas em PDF para Algoritmos, somente na Docsity!

MC102 – ALGORITMOS E PROGRAMAC¸ ˜AO DE

COMPUTADORES

Instituto de Computac¸˜ao — UNICAMP (^1) ¯ oSemestre de 2005

Aula 18 - Cadeias de caracteres

1 Objetivos

Apresentar e conceituar as cadeias de caracteres (strings), mostrar seu uso como vetores e mostrar fun¸c˜oes de biblioteca para manipula¸c˜ao destas cadeias.

2 Motiva¸c˜ao

Fazer programas que manipulem texto, por exemplo buscar palavras em um dicion´ario, ordenar palavras, etc.

3 Defini¸c˜ao de uma cadeia de caracteres

Uma cadeia de caracteres, mais conhecida como string, ´e uma sequˆencia de letras e s´ımbolos, onde os s´ımbolos podem ser espa¸cos em branco, d´ıgitos e v´arios outros como pontos de exclama¸c˜ao e interroga¸c˜ao, simbolos matem´aticos, etc. Em C, uma cadeia de caracteres ´e representada por um vetor de vari´aveis do tipo char e ´e terminada com o marcador ’\0’.

/∗ D e f i n i n d o e i n i c i a l i z a n d o uma c a d e i a de c a r a c t e r e s ∗/ char t e x t o [ 1 0 0 ] = ” Ola Mondo! ” ;

/∗ Como ´e um v e t o r , p o s s o c o r r i g i r o c a r a c t e r e e r r a d o da p o s i ¸c ˜a o 5 ∗/ t e x t o [ 5 ] = ’ u ’ ;

4 Mostrando e lendo uma cadeia de caracteres

A sequˆencia especial %s deve ser usada nos comandos printf e scanf para mostrar ou ler uma string, respectivamente.

/∗ Para mostrar na t e l a t o d o o t e x t o armazenado na v a r i ´a v e l t e x t o ∗/ p r i n t f ( ”%s ” , t e x t o ) ;

/∗ Para l e r um t e x t o do t e c l a d o ∗/ /∗ ( a s e q uˆe n c i a %s a p l i c a d a ao s c a n f l ˆe somente uma p a l a v r a ) ∗/ s c a n f ( ”%s ” , t e x t o ) ;

5 Convertendo cadeias de caracteres em n´umeros e vice-versa

Existem varia¸c˜oes dos comandos printf e scanf que ao inv´es de escrever na tela ou ler do teclado, eles escrevem/lˆeem de uma string. Os comandos tˆem um s (de string) na frente, portanto, s˜ao os comandos sprintf e sscanf. Estas varia¸c˜oes funcionam de forma similar ao printf e scanf, a ´unica diferen¸ca ´e que recebem como primeiro argumento a string que vai ser escrita ou lida.

#include

int main ( ) { /∗ Declaramos algumas c a d e i a s de c a r a c t e r e s ∗/ char v1 [ 1 0 ] , v2 [ 1 0 ] ;

/∗ Fazemos algumas c o n t a s ∗/ f l o a t f = 3. 2 5 ∗ 5. 7 3 ; int i = 5 ∗ 4 ∗ 3 ∗ 2 ∗ 1 ;

/∗ Convers˜oes de n´umeros para s t r i n g s ∗/

s p r i n t f ( v1 , ”%.1 f ” , f ) ; /∗ e s c r e v e o v a l o r de f para s t r i n g v1 ∗/ p r i n t f ( ”%s \n” , v1 ) ; /∗ mostra s t r i n g v1 ∗/

s p r i n t f ( v2 , ”%d” , i ) ; /∗ e s c r e v e o v a l o r de i para s t r i n g v2 ∗/ p r i n t f ( ”%s \n” , v1 ) ; /∗ mostra s t r i n g v2 ∗/

/∗ Convers˜oes de s t r i n g s para n´umeros ∗/

f l o a t f 2 ; int i 2 ;

s s c a n f ( v1 , ”%f ” , &f 2 ) ; /∗ l ˆe um f l o a t da s t r i n g v1 para f 2 ∗/ p r i n t f ( ”%.2 f \n” , f 2 ) ; /∗ mostra f l o a t f 2 ( perdeu p r e c i s ˜a o ) ∗/

s s c a n f ( v2 , ”%d” , &i 2 ) ; /∗ l ˆe um i n t da s t r i n g v2 para i 2 ∗/ p r i n t f ( ”%d\n” , i 2 ) ; /∗ mostra i n t i 2 ∗/

return 0 ; }

6 Manipulando cadeias de caracteres

As cadeias de caracteres s˜ao t˜ao importantes que existe uma biblioteca de fun¸c˜oes s´o com comandos para ela. E a biblioteca´ string.h. Entre as diversas funcionalidades oferecidas por esta biblioteca, podemos destacar: strlen(texto) Retorna o tamanho da string texto em n´umero de caracteres strstr(texto, busca) Procura a sub-string busca dentro da string texto e retorna um ponteiro para primeira ocorrˆencia dela em texto, ou NULL (nulo) se n˜ao encontrar strcpy(destino, fonte) Copia a string fonte para a string destino strcat(destino, fonte) Concatena a string fonte no fim da string destino

Usamos estas opera¸c˜oes no exemplo a seguir.

#include #include

#define TAMANHO 200

/∗ TESTE PARA FUNC¸ AO STRCHRˆ ∗/

#include

int main ( ) { char ∗ busca ;

i f ( busca = s t r c h r ( ” papagaio ” , ’ g ’ ) ) p r i n t f ( ” Achei a p a r t i r de ’% s ’. \ n” , busca ) ; }

7.2 Inserindo uma palavra

N˜ao existe em nenhuma biblioteca uma fun¸c˜ao que permita inserir uma sub-string no meio de outra string. Esta funcionalidade pode ser implementada manipulando a string como vetor de caracteres. Escreva uma implementa¸c˜ao para a nova fun¸c˜ao strins que receba como parˆametro a string de destino, a string de origem, a sub-string a ser inserida e a posi¸c˜ao na qual a sub-string vai ser inserida. O retorno desta fun¸c˜ao pode ser o tamanho da string de destino. int s t r i n s ( char ∗ d e s t i n o , char ∗ f o n t e , char ∗ sub , int pos ) { int i ;

/∗ c o p i a c a r a c t e r e s i n i c i a i s para d e s t i n o ∗/ for ( i = 0 ; i < pos ; i ++) { d e s t i n o [ i ] = f o n t e [ i ] ; }

/∗ c o p i a sub−s t r i n g para o d e s t i n o enquanto n˜ao chega no marcador ∗/ i = 0 ; while ( sub [ i ] != ’ \0 ’ ) { d e s t i n o [ pos + i ] = sub [ i ] ; i ++; }

/∗ Neste ponto a v a r i a v e l i armazena o tamanho da sub−s t r i n g ∗/ int tamanho sub = i ;

/∗ c o p i a o r e s t o dos c a r a c t e r e s da f o n t e para o d e s t i n o ∗/ i = pos ; while ( f o n t e [ i ] != ’ \0 ’ ) { d e s t i n o [ tamanho sub + i ] = f o n t e [ i ] ; i ++; }

/∗ r e t o r n a o tamanho da s t r i n g d e s t i n o ∗/ return tamanho sub + i ;

/∗ TESTE PARA FUNC¸ AO STRINSˆ ∗/

#include

int main ( ) { char f o n t e [ ] = ” Testando para uma p a l a v r a na f r a s e. ” ; char sub [ ] = ” i n s e r i r ” ; char d e s t i n o [ 1 0 0 ] ;

int l e n = s t r i n s ( d e s t i n o , f o n t e , sub , 1 4 ) ; p r i n t f ( ”A f r a s e f i c o u ’% s ’. \ n” , d e s t i n o ) ;

}

7.3 Pal´ındrome

Uma cadeia de caracteres ´e dita ser pal´ındrome se a sequˆencia dos caracteres da cadeia da esquerda para direita ´e igual a sequˆencia de caracteres da direita para esquerda. Por exemplo: as seguintes strings s˜ao pal´ındromes: ABC12321CBA, ACCA, XYZ6.6ZYX. Fa¸ca uma fun¸c˜ao que retorna verdadeiro se a cadeia de caracteres enviada como parˆametro ´e pal´ındrome.

#include

int palindrome ( char ∗ s t r ) { int p a l i n d , i , ultimo , meio ;

/∗ i n d i c e do ´u l t i m o c a r a c t e r e em s t r ∗/ u l t i m o = s t r l e n ( s t r ) − 1 ;

/∗ i n d i c e do c a r a c t e r e do meio em s t r ∗/ meio = s t r l e n ( s t r ) / 2 ;

/∗ assumo que s t r ´e p a li n d ro m e ∗/ p a l i n d = 1 ;

/∗ v e r i f i c o s e r e a l m e n t e ´e p a l i n d r o m e ∗/ i = 0 ; while ( p a l i n d && i <= meio ) { p a l i n d = ( s t r [ i ] == s t r [ ultimo −i ] ) ; i ++; }

return p a l i n d ; }