



Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
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
1 / 6
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Instituto de Computac¸˜ao — UNICAMP (^1) ¯ oSemestre de 2005
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.
Fazer programas que manipulem texto, por exemplo buscar palavras em um dicion´ario, ordenar palavras, etc.
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 ’ ;
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 ) ;
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 ; }
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
#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 ) ; }
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 ;
#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 ) ;
}
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 ; }