CES-10 INTRODUÇÃO À
COMPUTAÇÃO
Aulas Práticas – 2013
Capítulo VIII
Cadeias de Caracteres
Programa 8.1: Leitura e escrita de cadeias de caracteres
Cad1
#include <stdio.h>
‘2’
?
‘3’
?
‘4’
? ‘\0’
?
?
?
?
?
?
‘1’
?
#include <conio.h>
void main () {
1
2
3
4
5
6
7
8
9
0
char Cad1[10], Cad2[] = "abcde"; int i;
printf ("Digite uma cadeia de caracteres:\n\n");
scanf ("%s", Cad1);
Cad2
printf ("\nCad1 = %s", Cad1);
‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘\0’
printf ("\nCad2 = %s", Cad2);
printf ("\n");
1
2
3
4
5
0
for (i = 0; i <= 9; i++)
printf ("\n\tCad1[%d] = '%c' ou %d", i, Cad1[i], Cad1[i]);
printf ("\n");
Supor
Foi escrito:
a digitação de
1234<enter>
for (i = 0; i <= 5; i++)
Cad1
= 1234
printf ("\n\tCad2[%d] = '%c' ou %d", i,
Cad2[i],
Cad2[i]);
Cad2 = abcde
printf ("\n\nDigite algo para encerrar: ");
getch ();
Copiar, salvar
Cuidado para não digitar mais
}
que 9 caracteres para Cad1
e executar
Programa 8.2: O formato %s para leitura de cadeias de
caracteres
Copiar, salvar
e executar
#include <stdio.h>
Digite uma frase:
#include <conio.h>
typedef char cadeia[20];
gosto muito de CES-10
void main () {
cadeia Cad1, Cad2;
Cad1 = gosto
printf ("Digite uma frase:\n\n"); Cad2 = muito
scanf ("%s%s", Cad1, Cad2);
Digite algo para encerrar
printf ("\nCad1 = %s", Cad1);
Resultado
printf ("\nCad2 = %s", Cad2);
de uma
printf ("\n\nDigite algo para encerrar: ");
execução
getch ();
}
Com o formato %s, scanf encerra a leitura para uma variável,
quando encontra um espaço em branco, ou um ‘enter’, ou
tabulação
Programa 8.3: Comprimento de cadeias de caracteres
#include <stdio.h>
Copiar, salvar
#include <string.h>
e executar
#include <conio.h>
typedef char cadeia[50];
‘strlen’ retorna o no de caracteres
void main () {
de uma cadeia, sem contar o ‘\0’
cadeia Cad;
printf ("Digite uma cadeia de caracteres:\n\n");
scanf ("%s", Cad);
printf ("\n\tComprimento (%s) = %d", Cad, strlen(Cad));
printf ("\n\nDigite algo para encerrar: ");
Resultado de
getch ();
uma execução
}
Digite uma cadeia de caracteres:
anticonstitucionalissimamente
Comprimento (anticonstitucionalissimamente) = 29
Digite algo para encerrar
Programa 8.4: Vetor de cadeias de caracteres
#include <stdio.h>
Cadeias poderão
Copiar, salvar
#include <string.h>
ter no máximo 20
e executar
#include <conio.h>
caracteres
typedef char cadeia[21];
void main () {
cadeia VetCadeia[30]; int i, n, Comprimento[30];
printf ("Armazenamento de cadeia de caracteres:\n\n");
printf ("Armazenar quantas cadeias (maximo 30 cadeias)? ");
scanf ("%d", &n);
for (i = 0; i <= n-1; i++) {
printf
("\nDigite
uma cadeia (maximo
20com
caracteres):
");
Vetor
o
Vetor
de no máximo
scanf30("%s",
comprimento das
cadeias VetCadeia[i]);
de
Comprimento[i]
cadeias do vetor
caracteres = strlen (VetCadeia[i]);
}
VetCadeia
printf ("\n\n%30s|%15s", "Cadeia", "Comprimento");
printf ("\n----------------------------------------------");
for (i = 0; i <= n-1; i++)
printf ("\n%30s|%15d", VetCadeia[i], Comprimento[i]);
printf ("\n\nDigite algo para encerrar: "); getch ();
}
Programa 8.5: a função gets
Copiar, salvar
#include <stdio.h>
e executar
#include <conio.h>
void main ( ) {
int i, n; char Frase[200];
A frase digitada poderá ter
printf ("Numero de frases: ");
caracteres brancos e tabulações
scanf ("%d", &n);
printf ("\n");
for (i = 1; i <= n; i++) {
printf ("\n\nDigite a %da frase: ", i);
fflush (stdin); gets (Frase);
printf ("\n\tFrase digitada: %s", Frase);
}
printf ("\n\nDigite algo para encerrar: "); getch ();
A função ‘fflush’ esvazia o buffer
}
do teclado antes da chamada de
‘gets’
Programa 8.6: Conjuntos máximos de um arquivo
Sejam as seguintes definições:

Conjunto: sequência de caracteres imprimíveis não brancos,
dentro de um arquivo-texto

Subconjunto de um dado conjunto: conjunto contido nesse
dado conjunto

Subconjunto próprio de um dado conjunto: subconjunto
desse conjunto dado diferente do mesmo

Conjunto máximo: conjunto que não é subconjunto próprio
de nenhum outro conjunto
#include <stdio.h>
#include <conio.h>
typedef char cadeia1[31], cadeia2[11];
void main ( ) {
Criar um arquivo de nome arquivo01 com o seguinte
int x, n;
conteúdo:
198 0 17439&() 100110100011101
cadeia1 ConjMax;
82736193826 01101001 1b5FD4 1
cadeia2 FileName;
34528178 00 ff123e ABGkJX 98271 10
FILE *arq;
printf ("Conjuntos maximos de um arquivo: ");
printf ("\n\nDigite o nome do arquivo: ");
scanf ("%s", FileName);
arq = fopen (FileName, "r");
Copiar, salvar
n = 0; x = fscanf (arq, "%s", ConjMax);
e executar
while (x > 0) {
printf ("\n%s", ConjMax);
n++; x = fscanf (arq, "%s", ConjMax);
}
printf ("\n\nTotal: %d conjuntos maximos", n);
printf ("\n\nDigite algo para encerrar: "); getch ();
}
Exercício 8.1: Vetor de conjuntos máximos

Alterar o Programa 8.6 para que ele coloque todos os
conjuntos máximos num vetor de cadeias de caracteres e os
comprimentos desses conjuntos num vetor de inteiros

Usar as seguintes declarações:
cadeia1 VetCadeia[40]; int Comprimento[40];

Sendo a e b duas cadeias de caracteres, para copiar o
conteúdo da cadeia b na cadeia a, usar:
strcpy (a, b);
ao invés de a = b;

strcpy
ConjMax);
A função
strcpy (VetCadeia[i],
está no arquivo string.h

No final, escrever o conteúdo do vetor VetCadeia, com cada
cadeia ao lado de seu comprimento
Exemplo de saída, usando como entrada o arquivo01:
Conjuntos maximos de um arquivo:
Digite o nome do arquivo: arquivo01
arquivo01
198 0 17439&()
100110100011101
82736193826 01101001
1b5FD4 1 34528178
00 ff123e ABGkJX
98271 10
Total: 14 conjuntos maximos
198
0
17439&()
100110100011101
82736193826
01101001
1b5FD4
1
34528178
00
ff123e
ABGkJX
98271
10
Saída no vídeo Digite algo para encerrar:
3
1
8
15
11
8
6
1
8
2
6
6
5
2
Exercício 8.2: Alterar o programa do Exercício 8.1 para:

Montar um vetor de nome VetBin, com os conjuntos
máximos de VetCadeia que contenham apenas 0’s e 1’s

Considerando tais conjuntos máximos como sendo números
binários em complemento de 2, montar um vetor de nome
Compl2 contendo o valor em decimal correspondente a cada
um desses conjuntos máximos

No final, o programa deve escrever cada número binário em
complemento de 2 ao lado do valor correspondente em
decimal
Obs.: sendo A[i] = “abcde”, então
A[i][0] = ‘a’; A[i][1] = ‘b’; A[i][2] = ‘c’; etc
0 = Compl-2 (0) e 1 = Compl-2 (-1)
Exemplo de saída, usando como entrada o arquivo01:
Conjuntos maximos de um arquivo:
Digite o nome do arquivo: arquivo01
Total: 14 conjuntos maximos
198
0
17439&()
100110100011101
82736193826
01101001
1b5FD4
1
34528178
00
ff123e
ABGkJX
98271
10
3
1
8
15
11
8
6
1
8
2
6
6
5
2
6 numeros binarios
0
100110100011101
01101001
1
00
10
Digite algo para encerrar:
=
=
=
=
=
=
compl-2
compl-2
compl-2
compl-2
compl-2
compl-2
(0)
(-13027)
(105)
(-1)
(0)
(-2)
Exercício 8.3: Alterar o programa do Exercício 8.2 para:

Montar um vetor de nome VetDec com os conjuntos
máximos de VetCadeia que contenham apenas dígitos
decimais e não correspondam a números binários

Montar um vetor de números reais de nome Log10 tal que, se
VetDec[i] tiver 9 ou menos dígitos, Log10[i] é o logaritmo
na base 10 do número correspondente; senão, Log10[i] = -1

No final, o programa deve escrever cada elemento do vetor
VetDec ao lado do elemento correspondente no vetor Log10
Exemplo de saída, usando como entrada o arquivo01:
6 numeros binarios
0
100110100011101
01101001
1
00
10
=
=
=
=
=
=
compl-2
compl-2
compl-2
compl-2
compl-2
compl-2
(0)
(-13027)
(105)
(-1)
(0)
(-2)
4 numeros decimais
198
82736193826
34528178
98271
Digite algo para encerrar:
Log10
*****
Log10
Log10
(
198)
Valor muito
( 34528178)
(
98271)
= 2.296665
grande *****
= 7.538174
= 4.992425
Exercício 8.4: Alterar o programa do Exercício 8.3 para:

Montar um vetor de nome VetHexa com os conjuntos
máximos de VetCadeia que contenham apenas dígitos
hexadecimais e não correspondam a números binários

Montar um vetor de números inteiros de nome ValBase10 tal
que, se VetHexa[i] tiver 7 ou menos dígitos, ValBase10[i] é
o valor na base 10 do número correspondente; senão,
ValBase10[i] = -1

No final, o programa deve escrever cada elemento do vetor
VetHexa ao lado do elemento correspondente no vetor
ValBase10
Exemplo de saída, usando como entrada o arquivo01:
6 numeros binarios
0
100110100011101
01101001
1
00
10
=
=
=
=
=
=
compl-2
compl-2
compl-2
compl-2
compl-2
compl-2
(0)
(-13027)
(105)
(-1)
(0)
(-2)
4 numeros decimais
198
82736193826
34528178
98271
Log10
*****
Log10
Log10
(
198)
Valor muito
( 34528178)
(
98271)
= 2.296665
grande *****
= 7.538174
= 4.992425
6 numeros hexadecimais
198
82736193826
1b5FD4
34528178
ff123e
98271
Digite algo para encerrar:
= (408)10
***** Valor muito grande *****
= (1794004)10
***** Valor muito grande *****
= (16716350)10
= (623217)10
Download

[0] = `a`