Sie sind auf Seite 1von 91

Strings

DCC 119 Algoritmos

Sequncias de Caracteres

Sequncias de caracteres justapostos so


fundamentais no desenvolvimento de programas
computacionais.

Exemplos de sequncias de caracteres


(representadas internamente num programa):

Mensagem de e-mail;
Texto de um programa;
Nome e endereo em cadastro de clientes, alunos;
Sequencia gentica. Um gene (ou o DNA de algum
organismo) composto de sequencias dos caracteres
A, T, G e C (nucleotdeos);
E etc...

Caracteres em C

Os caracteres em C so representados internamente


por cdigos numricos (ASCII);
Alguns caracteres visveis (podem ser impressos)
0

30

sp

"

&

'

40

50

60

<

>

70

80

90

100

110

120

sp: espao em branco


3

Caracteres em C

A diferena entre caracteres e inteiros est apenas


na maneira como so tratados, por exemplo, o
cdigo
char c = 97;
printf("int : %d char : %c\n", c, c);

Imprimir
int : 97 char : a

O contedo da varivel c impressa em dois


formatos distintos: %d (int) e %c (char).
4

Caracteres em C

Por questo de portabilidade, no se deve usar


diretamente, no programa, o cdigo de caracteres;
Ao invs, usa-se uma constante caractere: caractere
entre apstrofe. Reescrevendo o fragmento de
cdigo anterior:
char c = 'a';
rintf("int : %d char: %c\n", c, c);

Imprimir
int : 97 char : a

Pode-se trocar char c por int c: o resultado ser o


mesmo.
5

Caracteres em C
Entrada/Sada de caracteres em C:

ch = getchar();

armazena um caractere digitado em ch at que


ENTER seja pressionado;
putchar(ch);

Imprime o caractere ch na tela do computador;

Exemplo:

int main()
{
char ch;
ch = getchar();
putchar(ch);
return 0;
}
6

Caracteres em C - Exemplo

Programa para verificar se um dado caractere c um


dgito (aproveita o fato de os dgitos estarem em
sequncia na tabela ASCII):
int main()
{
char c;
printf("Digite uma letra ou numero: ");
c = getchar();
if((c >= '0') && (c<='9'))
printf("Eh um digito");
else
printf("Nao eh um digito");
return 0;
}
7

Caracteres em C - Exemplo

Programa para converter uma letra (caractere)


minscula para maisculo (aproveita o fato de os
caracteres estarem em sequncia na tabela ASCII):
int main()
{
char c;
printf("Digite uma letra: ");
c = getchar();

// verifica se letra minuscula


// e imprime maiuscula
if(c >= 'a' && c<='z')
putchar(c - 'a' + 'A');
return 0;
}
8

Sequncias de Caracteres

Uma varivel usada para armazenar um caractere


representada da seguinte maneira:
char letra; // variavel letra do tipo caracter
letra = 'a'; // atribuida a letra "a" para a variavel

Se em uma varivel do tipo char podemos


armazenar somente um caractere, ento para
armazenar vrios caracteres (ex: jose, carro)
necessrio utilizar as sequncias de caracteres,
representadas por vetores do tipo char.
9

Strings

Em Programao, sequncias de caracteres so


usualmente chamadas de strings.

Na linguagem de programao C, uma string


representada por um vetor de caracteres cujo final
marcado pelo caractere nulo ( '\0' ).

Em C as strings devem obrigatoriamente


terminar com o caractere nulo.
10

Strings

Exemplo de declarao:
char cidade[15];

A varivel cidade um vetor de caracteres (cadeia


de caracteres).

A varivel cidade pode armazenar qualquer cadeia


de at 15 caracteres, incluindo o caractere nulo.
0
cidade

9 10 11 12 13 14

\0

11

Strings

Outros exemplos de strings em C:


char cidade[4] = {'R', 'i', 'o', '\0'};
char disc[40] = {'A','l','g', 'o', 'r', 'i', 't', 'm', 'o', '\0'};

Outras formas de inicializarmos strings em C:


char cidade[4] = "Rio";
char disc[40] = "Algoritmo";

Lembre-se sempre de reservar espao suficiente


para a string conter para o caractere nulo.

12

Strings

Para ilustrar a declarao e a inicializao de strings,


consideremos as seguintes declaraes:
char s1[] = "" ; //2 aspas sem espacos
char s2[81];
char s3[81] = "Rio";

s1 armazena uma string vazia. Tem um nico elemento: \0;


s2 representa uma cadeia de caracteres com at 80 caracteres e
no inicializada;
s3 tambm dimensionada para conter at 80 caracteres e
inicializada com a cadeia Rio.

13

Strings: Manipulao

Como uma string um vetor de caracteres,


podemos manipular os seus caracteres.

Exemplo:
char nome[10] = "rio";
char inicial = nome[0];
printf("Primeira letra: %c\n", inicial);
nome[0] = 'R';
printf("String alterada: %s\n", nome);

14

Strings: Entrada e Sada

printf, scanf
int main()
{
char s[20];
printf("Digite uma string: ");
scanf("%s", s);
printf("String digitada: %s", s);
return 0;
}

Neste caso, a leitura ser feita at encontrar um caractere


branco: espao (' '), tabulao (\t') ou nova linha (\n').
Se digitarmos Rio de Janeiro, s conter apenas Rio;
No necessrio o & antes da varivel s no scanf.
15

Strings: Entrada e Sada

Outras sub-rotinas para ler e imprimir strings.

gets, puts
int main()
{
char s[20];
printf("Digite uma string: ");
gets(s);
printf("String digitada: ");
puts(s);
return 0;
}

Se digitarmos Rio de Janeiro, s conter Rio de Janeiro;


gets(s): l a string s a partir do teclado;
puts(s): imprime uma string na tela seguida de nova linha.
16

Strings - Exemplo 1

O programa a seguir imprime uma string, caractere


por caractere:
int main()
{
char s[30];
int i;
printf("Digite uma string: ");
gets(s);
//imprime cada caractere da string lida
for(i=0; s[i]!='\0'; i++)
printf("%c",s[i]);
return 0;
}

Note que, o for acima equivale a printf("%s",s);


17

Strings - Exemplo 2

Esse programa calcula e imprime o comprimento


(numero de caracteres) de uma string:
int main()
{
char s[30];
int i, n = 0;
printf("Digite uma string: ");
gets(s);
for(i=0; s[i]!='\0'; i++)
n++;
printf("\nO tamanho de \"%s\" : %d",s,n);
return 0;
}

18

Strings - Exemplo 3

O programa a seguir faz uma copia de uma cadeia,


fornecida pelo usurio, para outra:
int main()
{
char dest[50], //string destino
orig[50]; //string origem
int i;
printf("Digite uma string: ");
gets(orig);

//copia cada caractere de orig para dest


for(i=0; orig[i]!='\0'; i++)
dest[i] = orig[i];
//coloca o caractere nulo para marcar o fim da string
dest[i] = '\0';
puts(dest);
return 0;
}
19

Funes para Strings

Existem vrias funes em C para


manipulao de strings.
Essas funes esto no arquivo string.h.
Entre elas pode-se destacar:

strcpy(char destino[], char origem[])

copia a string origem na string destino


strlen(char str[])
retorna o tamanho da string str
strcat(char destino[], char origem[])
faz concatenao (juno) da string origem
com a string destino. O resultado armazenado
na string destino
20

Exerccio resolvido 1

Criar uma funo que receba como parmetro


uma cadeia de caracteres (cadeia), seu
tamanho (tam) e um segundo caractere
(procurado). A funo dever retornar a
quantidade que o caractere procurado foi
encontrado na cadeia.

Soluo proposta:

Precisamos varrer a cadeia de caracteres


(estrutura de repetio) e contar quantos so iguais
ao caractere procurado, caractere a caractere.
21

Exerccio 1 Soluo proposta


int conta( char str[], int tam, char procurado )
{
int cont, i;
i = 0;
cont = 0;
while ( i < tam )
{
if ( str[i] == procurado )
{
cont++;
}
i++;
}
return cont;
}
22

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=
cont =
i

str

\0

23

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=?
cont = ?
i

str

\0

24

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=0
cont = 0
i

str

\0

25

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=0
cont = 0
i

str

\0

26

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=0
cont = 0
i

str

\0

27

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=0
cont = 1
i

str

\0

28

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=1
cont = 1
i

str

\0

29

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=1
cont = 1
i

str

\0

30

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=1
cont = 1
i

str

\0

31

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=2
cont = 1
i

str

\0

32

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=2
cont = 1
i

str

\0

33

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=2
cont = 1
i

str

\0

34

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=3
cont = 1
i

str

\0

35

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=3
cont = 1
i

str

\0

36

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=3
cont = 1
i

str

\0

37

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=3
cont = 2
i

str

\0

38

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=4
cont = 2
i

str

\0

39

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=4
cont = 2
i

str

\0

40

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=4
cont = 2
i

str

\0

41

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=5
cont = 2
i

str

\0

42

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=5
cont = 2
i

str

\0

43

Exerccio 1 Teste de Mesa


1 int conta( char str[], int tam,
2
char procurado )
3 {
4
int cont, i;
5
i = 0;
6
cont = 0;
7
8
while ( i < tam )
9
{
10
if ( str[i] == procurado )
11
{
12
cont++;
13
}
14
i++;
15
}
16
return cont;
17 }

Entrada:
str = teste
tam = 5
procurado = t
Variveis:
i
=5
cont = 2
i

str

\0

44

Exerccio resolvido 2

Criar uma funo para verificar se a string


s2 est contida na string s1. A funo
dever retornar 1 se encontrar a string ou 0,
caso contrrio.

Exemplo:

Se s1 fosse Ana Maria Silva e s2 fosse


Maria, a funo retornaria 1, pois s2 est
contido em s1.

45

Exerccio 2 Soluo proposta


int buscaString(char s1[], char s2[])
{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}
46

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =
j =
aux =
tam1 =
tam2 =
47

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =?
j =?
aux = ?
tam1 = ?
tam2 = ?
48

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =?
j =?
aux = ?
tam1 = 15
tam2 = 2
49

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =0
j =?
aux = ?
tam1 = 15
tam2 = 2
50

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =0
j =?
aux = 0
tam1 = 15
tam2 = 2
51

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =0
j =0
aux = 0
tam1 = 15
tam2 = 2
52

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =0
j =0
aux = 0
tam1 = 15
tam2 = 2
53

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =0
j =0
aux = 0
tam1 = 15
tam2 = 2
54

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =0
j =0
aux = 0
tam1 = 15
tam2 = 2
55

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =1
j =0
aux = 0
tam1 = 15
tam2 = 2
56

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =1
j =0
aux = 1
tam1 = 15
tam2 = 2
57

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =1
j =0
aux = 1
tam1 = 15
tam2 = 2
58

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =1
j =0
aux = 1
tam1 = 15
tam2 = 2
59

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =1
j =0
aux = 1
tam1 = 15
tam2 = 2
60

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =1
j =0
aux = 1
tam1 = 15
tam2 = 2
61

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =2
j =0
aux = 2
tam1 = 15
tam2 = 2
62

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =3
j =0
aux = 3
tam1 = 15
tam2 = 2
63

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =4
j =0
aux = 4
tam1 = 15
tam2 = 2
64

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =5
j =0
aux = 5
tam1 = 15
tam2 = 2
65

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =6
j =0
aux = 6
tam1 = 15
tam2 = 2
66

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =0
aux = 7
tam1 = 15
tam2 = 2
67

Exerccio 2 Teste
de
Mesa
aux
s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =0
aux = 7
tam1 = 15
tam2 = 2
68

Exerccio 2 Teste
de
Mesa
aux
s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =0
aux = 7
tam1 = 15
tam2 = 2
69

Exerccio 2 Teste
de
Mesa
aux
s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =0
aux = 7
tam1 = 15
tam2 = 2
70

Exerccio 2 Testeauxde Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =0
aux = 8
tam1 = 15
tam2 = 2
71

Exerccio 2 Testeauxde Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =1
aux = 8
tam1 = 15
tam2 = 2
72

Exerccio 2 Testeauxde Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =1
aux = 8
tam1 = 15
tam2 = 2
73

Exerccio 2 Teste de
Mesa
aux
s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =1
aux = 9
tam1 = 15
tam2 = 2
74

Exerccio 2 Teste de
Mesa
aux
s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =2
aux = 9
tam1 = 15
tam2 = 2
75

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =2
aux = 9
tam1 = 15
tam2 = 2
76

Exerccio 2 Teste de Mesa


s1

int buscaString(char s1[], char s2[])


{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0; i<tam1; i++)
{
aux=i;
for(j=0; j<tam2 && aux<tam1; j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

10

11

12

13

14

15

\0

s2

\0

Entrada:
s1 = Este um teste
s2 = um
Variveis:
i =7
j =2
aux = 9
tam1 = 15
tam2 = 2
Sada: 1

77

Exerccio 2 Completo
#include <stdio.h>
#include <string.h>
int buscaString(char s1[],
char s2[])
{
int i,j,aux, tam1, tam2;
tam1 = strlen(s1);
tam2 = strlen(s2);
for(i=0;i<tam1;i++)
{
aux=i;
for(j=0;j<tam2 && aux<tam1;j++)
{
if (s2[j] != s1[aux])
break;
aux++;
}
if (j == tam2)
return 1;
}
return 0;
}

int main()
{
char s1[100], s2[100];
gets(s1);
gets(s2);
int res = buscaString(s1, s2);
if(res)
printf("Encontrou");
else
printf("Nao encontrou");
return 0;
}

78

Exerccios
1) Fazer um programa para contar o nmero de espaos em
brancos de uma string.
2) Refaa o programa anterior criando uma funo que
receber como parmetro a string e retornar o nmero de
espaos em branco que a string contem.
3) Fazer um programa para contar o nmero de vogais numa
cadeia de caractere.
4) Refaa o programa anterior criando uma funo que
receber como parmetro a string e retornar o nmero de
vogais que a string contem.
79

Exerccios
5) Escrever um programa para ler uma string (com mais de
uma palavra) e faa com que a primeira letra de cada
palavra fique em maiscula. Para isso, basta subtrair 32 do
elemento que deseja alterar para maisculo.
chrNome[0] = chrNome[0] 32;
Exemplo:
Entrada: lab. de linguagem de programacao
Sada: Lab. De Linguagem De Programacao
6) Escreva uma funo que receba uma string, conte
quantos caracteres desta string so iguais a 'a' e substitua
os que forem iguais a 'a' por 'b'. A funo dever retornar o
nmero de caracteres modificados.
80

Exerccios
7) Crie um procedimento que receba uma frase e a exiba na
tela de forma soletrada, ou seja, cada letra deve ser
exibida na tela separada por hfen.
8) Crie um procedimento que receba uma string de no
mximo 50 caracteres e inverta a ordem da string
digitada;
Exemplo:
Entrada: Teste
Sada: etseT
9) Fazer um programa para determinar e imprimir uma string
que ser a concatenao de duas outras strings lidas.
81

Vetores de caracteres
DCC120

Strings

Em C, strings so cadeias de caracter terminadas,


obrigatoriamente, pelo caractere nulo: \0 (\zero).
Portanto, deve-se reservar uma posio para este
caractere que marca o fim da string.
Exemplos:
char str[10] = {'a','b','c','\0'};
char uni[5];
uni[0] = 'U';
uni[1] = 'F';
uni[2] = 'J';
uni[3] = 'F';
uni[4] = '\0';
char disc[] = "Programacao";
83

Strings

Leitura e impresso

scanf e printf com especificador %s


Ou com as sub-rotinas de strings gets e puts
int main()
{
char s[20];
printf("Digite uma string: ");
gets(s);
printf("String digitada: ");
puts(s);
return 0;
}

gets(s): l a string s a partir do teclado;


puts(s): imprime uma string na tela seguida de nova linha.
84

Strings

Sub-rotina com string

int conta( char str[], int tam,


char procurado )
{
int cont, i;
i = 0;
cont = 0;
while ( i < tam )
{
if ( str[i] == procurado )
{
cont++;
}
i++;
}
return cont;
}

#include <stdio.h>
#include <string.h>
int main()
{
char nome[] = "UFJF";
int total;
int tam;
tam = strlen(nome);
total = conta(nome,tam,'F');
return 0;
}

85

Exerccios
1) Fazer um procedimento para imprimir uma string recebida
como parmetro sem os espaos em branco.
2) Fazer um procedimento para receber uma string do
usurio (mx. 50 caracteres) e imprimir uma estatstica
dos caracteres digitados. Isto , imprimir o nmero de
vogais, consoantes e outros caracteres.

3) Fazer um programa para ler uma string e transfira as


consoantes para um vetor e as vogais para outro. Depois
mostre cada um dos vetores.

86

Exerccios
4) Faa uma funo que receba uma string do usurio (mx.
20 caracteres) e um caractere qualquer. A funo dever
remover todas as ocorrncias do caractere da string e
retornar o nmero de remoes.

5) Escreva uma funo que receba uma cadeia de caracteres


de tamanho mximo 100, e retornar 1 se esta cadeia
uma palndrome e zero caso contrrio. Uma palavra dita
ser palndrome se a seqncia de seus caracteres da
esquerda para a direita igual a seqncia de seus
caracteres da direita para a esquerda. Ex.: arara, asa.

87

Exerccios
6) Um dos sistemas de encriptao mais antigos atribudo
a Jlio Csar: se uma letra a ser encriptada a letra de
nmero N do alfabeto, substitua-a com a letra (N+K), onde
K um nmero inteiro constante (Csar utilizava K = 3).

Dessa forma, para K = 1 a mensagem Ataque ao


amanhecer se torna bubrfabpabnboifdfs. Faa um
programa que receba como entrada uma mensagem e um
valor de K e retorne a mensagem criptografada pelo
cdigo de Csar.

88

Exerccios Biblioteca String


!!!DESAFIO!!!
7) Montar uma biblioteca com funes para manipular strings.
Ideia: Uma biblioteca um conjunto de subrotinas e tipos de
dados que voc pode incluir no seu programa sem a
necessidade de digitar novamente o cdigo.
Exemplo: #include <stdio.h> // biblioteca do sistema!
Podemos criar nossas prprias bibliotecas!
89

Exerccios Biblioteca String


Como fazer:
1) No seu Projeto, crie e inclua um novo arquivo chamado
biblio.h, onde iremos colocar somente os prottipos
das subrotinas da nossa biblioteca.
2) Crie e inclua no mesmo Projeto o arquivo biblio.c, onde
iremos colocar a implementao das subrotinas
prototipadas no arquivo biblio.h
3) No arquivo main.c do seu projeto, basta fazer referncia
biblioteca criada (#include biblio.h). Observe que voc
no utilizou os sinais de maior e menor para indicar a
biblioteca, mas sim aspas. Isso indica que a biblioteca
est no mesmo diretrio do projeto.

90

Exerccios Biblioteca String


Agora, construa sua biblioteca que fornea os principais recursos para a
manipulao de strings. Sendo as funcionalidades propostas:

Copia(): copia uma string para outra


Compara(): compara duas strings
Minusculo(): transforma os caracteres em minsculo
Maiusculo(): transforma os caracteres em maisculo
Sentenca(): organiza a string como sentena
Pessoa(): coloca os caracteres iniciais em maisculo
Soma(): soma duas strings
ProcuraTrecho(): procura uma string em outra
ProcuraCaracter(): procura o ocorrncia de caracteres na string

91

Das könnte Ihnen auch gefallen