Buscar

Manipulação de Strings em C

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

String: Cadeia de caracteres.
S
t
r
i
n
g
s
Conceitos Básicos
A linguagem C não possui o tipo de dados primitivo string, diferentemente 
de outras linguagens de programação. Logo, como representar e manipular 
esse importante tipo de dado.
Em C, uma string é representada por um array de caracteres, ou seja, um 
agregado homogêneo, em que o tipo base é um char.
O último caractere de qualquer string em C é o caractere nulo (caractere 
de terminação) que é representado por ‘\0’. Isso possibilita que ao 
desenvolvermos nossas códigos possamos reconhecer o seu final, e 
consequentemente manipular esses objetos de forma mais consistente.
O caractere nulo não é passível de ser impresso e possui valor ordinal 0 
(zero) na Tabela ASCII.
´r´ ´a´ ´\0´´o´´E´ ´r´ ´d´ ´e´ ´r´´E´ ´n´ ´a´´d´´t´
S
t
r
i
n
g
s
Conceitos Básicos
´r´ ´\0´´o´´E´ ´r´
´a´ ´\0´´r´´E´ ´n´ ´a´´d´´t´
´r´ ´a´ ´\0´´o´´P´ ´ã´´ç´´g´ ´m´ ´a´´r´ ´o´
´a´ ´\0´´i´´M´ ´r´ ´i´´A´ ´é´´a´ ´a´´l´´m´
Exemplos:
S
t
r
i
n
g
s
Conceitos Básicos
Como a linguagem C não possui o tipo de dados primitivo string, todas 
manipulações associadas a uma string só podem ser realizadas através de 
funções primitivas da biblioteca padrão <string.h> ou através de funções 
que você elaborar, jamais através de operadores de atribuição ou 
relacionais. 
Se s1 e s2 são variáveis do tipo string, as instruções abaixo são inválidas
if (s1 == s2) ...
if (s1 >= s2) ...
Não existe em C 
operadores para manipular 
strings.
Observações: 
Æ ‘a’ é diferente de “a”;
Æ‘0’ é diferente de 0 (zero).
Como converter um caractere numérico para o seu respectivo valor 
decimal?
‘a’ : caractere a;
“a” : string “a”; a \0
s = s1 + s2 ;
S
t
r
i
n
g
s
Conceitos Básicos
Embora a linguagem C não possua um tipo de dado primitivo (pré-definido) 
para manipular strings, ela admite constantes do tipo string (sempre entre 
aspas), declaradas através da diretiva de pré-processamento define. 
Nesse caso, o compilador automaticamente acrescenta o caractere nulo ao 
seu final.
Só para lembrar:
...
#define MSG1 “Erro de Entrada!!!”
#define MSG2 “Introduza um valor inteiro: ”
...
S
t
r
i
n
g
s
Conceitos Básicos
Æ Comparação entre strings; 
Operações sobre Strings
Æ Pesquisa/localização/ocorrências de caracteres em strings;
Æ Pesquisa/localização exata/aproximada de strings em strings;
Æ Conversão de strings em dados numéricos;
Æ Cópia e concatenação (merge) de strings;
Æ Calcular o comprimento (número de caracteres) de strings; 
Æ Separação de strings; ....
S
t
r
i
n
g
s
Conceitos Básicos
Æ Editores de texto em geral (correção ortográfica, verificação de 
ocorrência, reconhecimento de autoria, ...); 
Algumas Aplicações
TRABALHO DE PROGRAMAÇÃO – ICC
Operações sobre Conjuntos – Arrays
Arrays (arranjos unidimensionais) podem ser utilizados para representar 
diferentes conjumtos de elementos. Logo, estas estruturas podem ser utilizadas de 
forma que possamos operar sobre estes objetos matemáticos. Este é exatamente o 
objetivo deste trabalho.
Vamos considerar A e B como sendo conjuntos de numeros inteiros 
positivos ordenados com m e n elementos, respectivamente. Vamos adimitir ainda 
que ambos os conjuntos estejam armazenados numa estrutura de array.
S
t
r
i
n
g
s
Conceitos Básicos
Algumas Aplicações
Æ Busca/Localização de documentos em seu sistema Desktop/Internet, ....
S
t
r
i
n
g
s
Conceitos Básicos
Algumas Aplicações
ÆGenômica/ Biologia Computacional (identificação de padrões em DNA, 
alinhamentos de seqüências, ...);
S
t
r
i
n
g
s
Conceitos Básicos
Texto: ACCCTGTTTAGATCACGGCACTACTGTAAAC
Partes do padrão: TAAAT, CACGG, CATACT
Padrão: TAAATCACGGCATACT
S
t
r
i
n
g
s
Conceitos Básicos
...
#define MAX 100
char string1[MAX], string2[2*MAX]; //array de caracteres
char *ptr_s1, *ptr_s2;
Declaração de Strings e Ponteiros para
tipo base char
Lembre-se, o caractere ‘\0’ deve ser 
acrescentado em toda string, assim, se você 
desejar armazenar uma “cadeia de caracteres”
de tamanho 50, então, a dimensão do array 
deve ser 51.
Uma Boa 
Idéia!!!
S
t
r
i
n
g
s
Conceitos Básicos
Leitura de Strings
A função padrão de leitura formatada scanf(.), pode ser usada 
para leitura de strings, mas não é ideal, já que ela permite a leitura 
de vários itens separados por um caractere de tabulação, por um 
caractere de espaço, ou ainda pelo pressionar da tecla ENTER.
Somente a primeira parte da string, representada por “Introdução”
seria armazenada. Ver exemplo de código no próximo slide.
Por exemplo, o que acontece se lermos a string “Introdução a 
Ciência da Computação” com a função scanf(.). 
S
t
r
i
n
g
s
Conceitos Básicos
...
char string[51];
...
printf(“Introduza uma < string >: ”); 
scanf(“%s”,string);
printf(“String introduzida”,string);
...
Uso de scanf(.) para leitura de Strings
(Inadequado)
S
t
r
i
n
g
s
Conceitos Básicos
Funções Específicas para leitura/Impressão 
de Strings
Leitura: (<stdio.h>)
char *gets(char *Str) // protótipo
Essa função lê uma string da entrada padrão (stdin) até encontrar o 
caractere de nova linha (‘\n’ – Tecla ENTER) ou de fim de arquivo, que é
então substituído pelo caractere de terminação ‘\0’, automaticamente. A 
string introduzida é transferida para o endereço apontado pela variável Str.
O valor de retorno dessa função é um ponteiro para o endereço 
base associada a string Str. Se, ocorrer um erro, então um NULL é
retornado.
S
t
r
i
n
g
s
Conceitos Básicos
Funções Específicas para leitura/Impressão 
de Strings
Impressão: (<stdio.h>)
int puts(const char *String) // protótipo
Essa função imprime a string passada como argumento (conteúdo 
do endereço) no dispositivo padrão de saída (stdout = monitor) e 
muda para a próxima linha, ou seja, após imprimir a string, a função 
acrescenta um caractere de nova linha (‘\n’).
O valor de retorno dessa função é maior (igual) que 0 (zero) 
(SUCESSO), ou, menor que 0 (zero), no caso de fracasso. 
S
t
r
i
n
g
s
Conceitos Básicos
Inicialização de Strings
...
#define MAX 100
char string1[MAX] = “Batata doce!!!”;
char NomeArq[MAX] = {‘a’,’r’,’q’,’1’,’.’,’c’,’\0’};
char *str = “Eu adoro programar recursivamente!!!”;
É possível inicializar strings no momento de sua declaração, e, 
automaticamente o caractere nulo é acrescentado. Se você colocar 
o caractere de nova linha (‘\n’), ele será contado como um caractere.
Lembre-se, não é possível usar o operador de atribuição para 
associar strings a variáveis.
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings 
Devolve o tamanho da string (número de caracteres sem o 
caractere nulo) associada ao endereço que foi passado como 
argumento.
int strlen(const char *String) // protótipo
Cabeçalho <string.h> : Amplo conjunto de primitivas para 
manipulação de strings.
A palavra reservada const é um qualificador que não permite que 
os objetos pré-fixados por ele sejam modificados.
S
t
r
i
n
g
s
Funções Alternativas
// Comprimentos alternativos de uma string
int Funcao_Comprimento_Strings1(const char *Str1) {
int i = 0;
for ( ; *(Str1 + i) != '\0'; i++ );
return(i);
} // Funcao_Comprimento_Strings1
int Funcao_Comprimento_Strings2(const char *Str1) {
const char *sp = Str1;
while ( *( sp++ ) );
return(sp - Str1 - 1);
} // Funcao_Comprimento_Strings2
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings
Anexa/Concatena/merge duas strings. Uma cópia do conteúdo do 
segundo parâmetro que identifica a 2ª string é anexado ao 
conteúdo da 1ª string, cujo apontador é Str1.
char *strcat(char *Str1, const char *Str2);
Observações:
Æ A 2ª string não é alterada;
Æ Essa função não verifica se a 2ª string “cabe” no espaço reservado para a 1ª
string. Essa responsabilidade é do Programador;
Æ O primeiro caractere associado a Str2 sobrepõe o caractere de terminação 
relativo a Str1;
Æ O caractere de terminação de Str2 é associado a Str1;
Æ Um ponteiro parao endereço associado a Str1 é retornado.
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings
Copia a string associada ao endereço apontado por Str2 para a 
string cujo apontador é Str1. O conteúdo do segundo parâmetro 
que identifica a 2ª string é copiado para o endereço da 1ª string, 
que está sendo apontado por Str1.
char *strcpy(char *Str1, const char *Str2);
Observações:
Æ O array associado ao apontado Str1 deve ser grande o suficiente para 
conter o conteúdo do array apontado por Str2, mais o caractere de 
terminação;
Æ Um ponteiro para a Str1 é retornado;
Æ Não é possível alterar o conteúdo de Str2.
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings
Compara as strings Str1 e Str2, caractere a caractere e retorna a 
diferença do valor ordinal (tabela ASCII) entre os dois primeiros 
caracteres diferentes.
int strcmp(const char *Str1, const char *Str2);
strcmp(Str1,Str2)=
-1 se Str1 < Str2
0 se Str1 = Str2
1 se Str1 > Str2
-1, 0, 1
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings
int strcmp(const char *Str1, const char *Str2);
Observações:
Æ A comparação é no sentido alfabético (ordem lexicográfica), não em relação ao 
tamanho das strings;
Æ ‘A’ < ‘B’ < ...< ‘Z’ < ‘a’ < ‘b’< ... < ‘z’. (Lembrem-se do código/tabela ASCII)
Str1 Str2 Valor Retornado
“AA” “Ae” -1
“CC” “CC”’ 0
“BA” “AB” 1
“a” “z” -1
“2” “19” 1
“Maria” “Mario” -1
“Mario” “Maria” 1
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings
A Biblioteca Padrão <string.h> possui ainda outras funções de 
comparação. 
strncmp(.): Compara somente os n primeiros caracteres de cada string;
stricmp(.): não é sensível as diferenças entre caracteres maiúsculos e 
minúsculos (case insentitive);
strincmp(.): versão insensitiva para comparar os n primeiros caracteres;
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings
Verifica se o caractere Ch ocorre na string Str1. 
char *strchr(const char *Str1, int Ch);
Se ocorrer, retorna um ponteiro para o endereço do caractere 
relativo a primeira ocorrência de Ch em Str1. Caso contrário, retorna 
NULL. 
Retorna o endereço da última ocorrência do caractere Ch em Str1. 
Caso contrário, retorna NULL. 
char *strrchar(const char *Str1, int Ch);
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings
Conversão de strings para valores numéricos
Uma boa maneira de evitar erros de entrada é realizar a leitura dos 
valores (inteiros ou reais) através de uma string. Em seguida 
convertê-la para os formatos apropriados. 
Se a leitura for de valor inteiro, então a string só poderá conter os 
caracteres decimais ( ‘0’ ... ‘9’ ) e os caracteres ‘+’ e ‘-’. Se houver qualquer 
outro caractere presente, então um erro poderá ser reportado, exatamente 
na posição em que ocorreu. 
Se a leitura for de valor real, então a string só poderá conter os caracteres 
decimais ( ‘0’ ... ‘9’ ), os caracteres (‘.’), ‘e’, ‘E’, ‘+’ e ‘-’. 
Exercício: Desenvolva funções para garantir a correção de dados 
numéricos (inteiros e reais) de entrada.
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings
Conversão de strings para valores numéricos
int *atoi(const char *Str1); // <stdlib.h>
A biblioteca padrão possui várias funções para conversão de strings em 
seus respectivos valores numéricos. 
”1234” = 1234
“12abc” = 12
“abcd” = 0
“12 34” = 12
Processa todos os dados até que um dígito não numérico seja encontrado. 
Reconhece os caracteres ‘+’ e ‘-’. 
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings
Conversão de strings para valores numéricos
double atof(const char *Str1); // <stdlib.h>
”123.456” = 123.456
“87abc” = 87.000000
“8.7ab” = 8.700000
“12345e02” = 1.2345e+04
Processa todos os dados até que um dígito não numérico seja encontrado. 
Reconhece os caracteres ‘e’, ‘E’, ‘+’ e ‘-’. (‘e’, ‘E’ : formato exponencial) 
S
t
r
i
n
g
s
Conceitos Básicos
Funções Básicas para Manipulação de Strings
Conversão de strings para valores numéricos
As funções para conversão de strings em seus respectivos valores 
numéricos: atoi(), atol() e atof(), são antigas e foram substituídas 
por outras mais avançadas no decorrer da evolução da linguagem. Nas 
próximas aulas iremos abordá-las.
S
t
r
i
n
g
s
Exercícios
Embora existam um conjunto significativo de funções primitivas para 
manipular strings, é importante criar seus próprios códigos para as funções 
abaixo, objetivando aumentar seu nível de conhecimentos e habilidades de 
programação com arrays e dados do tipo strings.
01) Aproveite seu tempo livre para elaborar versões das funções abaixo:
strlen(); strcpy(); strcat(); strcmp();
02) Dado as strings Str1 e Str2 com tamanhos m e n ( m ≥ n ), 
respectivamente, elabore uma função para verificar se Str2 ocorre (está
presente) na string Str1. Em outras palavras, se Str1 contém Str2.
Esse problema é conhecido como “casamento de padrões” (pattern
matching) e encontra aplicações em várias áreas do conhecimento.
S
t
r
i
n
g
s
Exercícios
03) Elabore uma função para inverter uma string. 
04) Elabore uma função para verificar o número de ocorrências de um 
caractere numa string. 
05) Elabore uma função para converter todos os caracteres alfabéticos de 
uma string para minúsculas (maiúsculas). 
06) Elabore uma função para verificar se uma string é palíndromo.
Ana
A torre da derrota.
A man, a plan, a canal, Panama
Men, I'm Eminem
Para cada uma das funções que for elaborar, tome suas próprias decisões 
em relação aos parâmetros e valores de retorno de cada uma delas.
S
t
r
i
n
g
s
Biblioteca Padrão <ctype.h>
int isalnum(int Ch);
06) Elabore suas próprias versões das funções abaixo, existentes no 
cabeçalho <ctype.h>. Na dúvida, consulte qualquer livro sobre C que 
tenha informações sobre a biblioteca padrão. Uma olhada na Tabela ASCII 
também ajuda.
Manipulação de Caracteres
int isalpha(int Ch);
int isdigit(int Ch);
int islower(int Ch);
int isupper(int Ch);
S
t
r
i
n
g
s
Biblioteca Padrão <ctype.h>
Códigos básicos;
Problema de Casamento de Padrões ( abordagens algorítmicas);
Último Trabalho Prático (Laboratório) sobre o tema.
Próxima Aula
Finalmente vamos descobrir a razão da linha:
int main(int argc, char **argv)
S
t
r
i
n
g
s
Alguns Livros (importância do tema)
S
t
r
i
n
g
s
Alguns Livros (importância do tema)
S
t
r
i
n
g
s
Alguns Livros (importância do tema)

Continue navegando