Buscar

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

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

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ê viu 3, do total de 8 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

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

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ê viu 6, do total de 8 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

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

Prévia do material em texto

1 
LINGUAGEM E TÉCNICA DE PROGRAMAÇÃO I 
 
Profa. Gisele Busichia Baioco 
gisele@ft.unicamp.br 
 
 
Algoritmos Estruturados e 
Linguagem de Programação Estruturada 
 
Cadeias de Caracteres – Strings – em C 
1 Declaração e Armazenamento 
Uma cadeia de caracteres ou string consiste de uma seqüência de caracteres 
imprimíveis (letras, dígitos, brancos, símbolos de pontuação, etc). 
Em C, uma string é definida como um vetor unidimensional de caracteres que tem 
como último caractere um ‘\0’ (indica o final da string). Por essa razão, deve-se declarar os 
vetores de caracteres um caractere maior que a maior string que irão armazenar. Exemplo: 
para se armazenar uma string de 10 caracteres em um vetor str, deve-se declara-lo da seguinte 
maneira: 
 
char str[11]; 
 
Caso str armazene a palavra ESTUDANTES, esquematicamente, o armazenamento no 
vetor fica: 
 
str E S T U D A N T E S \0 
 0 1 2 3 4 5 6 7 8 9 10 
 
A sintaxe geral de declaração de uma string em C é a seguinte: 
 
 char str[tamanho+1]; 
 
onde: 
str: é o nome (identificador) da string; 
tamanho + 1: é o tamanho máximo da string já considerando uma posição a mais para 
armazenar o ‘\0’. É válido armazenar strings menores ou iguais a tamanho. 
 
Uma constante string em C deve vir entre aspas. Exemplos: “bom dia”, “teste”. 
2 Lendo uma String 
Para ler uma string do teclado pode-se utilizar as seguintes funções: 
 
gets() 
Sintaxe: 
gets(str); 
onde: 
str: é o nome da string especificado na declaração. 
 2 
 
Exemplo: 
 
#include <stdio.h> 
 
 main() 
 { 
 char nome[31]; 
 gets(nome); /* lê uma string do teclado */ 
 } 
 
scanf() 
Sintaxe: 
scanf(“%s”, str); 
onde: 
str: é o nome da string especificado na declaração. 
 
Deve-se observar que não há necessidade de preceder o nome da string com o 
operador &, pois o próprio identificador da string (sem índice) já é o endereço da string. 
 
Exemplo: 
 
#include <stdio.h> 
 
 main() 
 { 
 char nome[41]; 
 scanf(“%s”, nome); /* lê uma string do teclado */ 
 } 
3 Escrevendo uma String 
Para escrever uma string na tela pode-se utilizar as funções: 
 
puts() 
Sintaxe: 
puts(str); 
onde: 
str: é o nome da string especificado na declaração. 
 
Exemplo: 
 
 #include <stdio.h> 
 
 main() 
 { 
 char nome[31]; 
 gets(nome); /* lê uma string do teclado */ 
puts(nome); /* escreve uma string na tela */ 
puts(“teste”); /* escreve teste na tela */ 
 } 
 
A função puts() automaticamente pula 1 linha após escrever uma string e reconhece 
os mesmos códigos de barra invertida de printf(), como por exemplo, \t para tabulação. 
 
 3 
printf() 
Sintaxe: 
printf(“%s”, str); 
onde: 
str: é o nome da string especificado na declaração. 
 
 Exemplo: 
 
 #include <stdio.h> 
 
 main() 
 { 
 char nome[41]; 
 scanf(“%s”, nome); /* lê uma string do teclado */ 
 printf(“%s”, nome); /* escreve uma string na tela */ 
 } 
4 Algumas Operações com Strings 
As operações com strings em C são realizadas utilizando funções da biblioteca 
string.h. Algumas delas são descritas a seguir. 
 
strcpy(str1, str2) – copia a string str2 para str1 (str1 deve ter o tamanho 
suficiente para conter str2). Exemplo: 
 
#include <string.h> 
 
main() 
 { 
 char str[80]; 
 strcpy(str, "Boa Noite"); 
 } 
 
strcat(str1, str2) – concatena a string str2 ao final de str1 (str1 deve ser do 
tamanho de str1+str2, considerando um caractere ‘\0’). Exemplo: 
 
#include <stdio.h> 
#include <string.h> 
 
main() 
 { 
 char prim[20], seg[10]; 
 strcpy(prim,"Boa"); 
 strcpy(seg," Noite"); 
 strcat(prim, seg); 
 puts(prim); 
 } 
 
strcmp(str1, str2) – compara duas strings, retornando 0 se str1 for igual a str2, um 
número inteiro positivo de str1 for alfabeticamente maior que str2 e um número inteiro 
negativo se str1 for alfabeticamente menor que str2). Exemplo: 
 4 
#include <stdio.h> 
#include <string.h> 
 
main() 
{ 
 char senha[80]; 
 printf("Digite a senha: "); 
 gets(senha); 
 if (strcmp(senha, "32SIA") != 0) 
 printf("Senha Invalida\n"); 
 } 
 
strlen(str) – retorna o comprimento da string str (o caractere ‘\0’ não é 
considerado). Exemplo: 
 
#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
 
 main() 
 { 
 char str[80]; 
 int i, tam; 
 printf("Digite uma string: "); 
 gets(str); 
 tam = strlen(str); 
 for (i = 0; i < tam; i++) 
 str[i] = toupper(str[i]); /* converte para maiúscula */ 
 puts(str); 
 ) 
5 Vetores de Strings 
Em C, um vetor de strings equivale a uma matriz bidimensional de caracteres, na qual 
o tamanho do índice esquerdo determina o número de strings e o tamanho do índice direito 
especifica o comprimento máximo de cada string. O exemplo seguinte declara uma matriz de 
30 strings, sendo que cada uma tem o comprimento máximo de 80 caracteres: 
 
 char matriz_str[30][80]; 
 
 Para acessar a string de uma determinada posição da matriz, basta especificar o índice 
esquerdo. Por exemplo, o comando seguinte utiliza gets() com a terceira string de matriz_str: 
 
 gets(matriz_str[2]); 
 5 
6 Exemplos de Programas 
1) Faça um programa C para criptografar uma frase dada pelo usuário, sendo que a 
criptografia consiste em trocar as vogais da frase por *. No final escreva a frase 
criptografada. 
Solução: 
Entrada: Digitar uma frase; 
Processo: 
• Pegar o tamanho da frase; 
• Percorrer a frase pegando um caractere de cada vez; 
• Comparar cada caractere com as vogais; 
• Quando encontrar colocar um * na posição da vogal; 
Saída: Frase criptografada. 
 
#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
 
#define MAX 100 
 
main() 
{ 
char frase[MAX], letra; 
int tam, i; 
 printf("Digite uma frase: "); 
gets(frase); 
 tam = strlen(frase); 
 for (i = 0; i < tam; i++) 
 { 
 letra = toupper(frase[i]); 
 if ((letra == 'A') || (letra == 'E') || (letra == 'I') || 
 (letra == 'O') || (letra == 'U')) 
frase[i] = '*'; 
 } 
 puts(frase); 
} 
 
 6 
2) Faça um programa C que se comporte como um tipo de vírus que duplica cada uma 
das palavras de uma frase digitada pelo usuário. No final escreva a frase resultante. 
Solução: 
Entrada: Digitar uma frase; 
Processo: 
• Pegar o tamanho da frase; 
• Percorrer a frase pegando um caractere de cada vez; 
• Comparar cada caractere com espaço em branco; 
• Quando encontrar espaço, encontrou o fim de uma palavra, então armazenar a palavra 
encontrada; 
• Inserir a palavra encontrada na frase resultante; 
Saída: Frase resultante da duplicação de palavras. 
 
#include <stdio.h> 
#include <string.h> 
 
#define MAXF 60 
#define MAXFRES 2*MAXF 
#define MAXP 20 
 
main() 
{ 
 char frase[MAXF], frase_res[MAXFRES], palavra[MAXP]; 
 int tam, i, cont, res; 
 printf("Digite uma frase: "); 
 gets(frase); 
 tam = strlen(frase); 
 strcpy(palavra, "\0"); /* inicializa a variável palavra */ 
 strcpy(frase_res, "\0"); /* inicializa a variável frase_res */ 
 cont = 0; 
 for(i = 0; i <= tam; i++) /* percorre cada caractere da frase */ 
 { 
 if ((frase[i] != ' ') && (frase[i] != '\0')) 
 { 
palavra[cont] = frase[i]; /* armazena cada letra da palavra */ 
 cont++; 
 } 
 else { 
 palavra[cont] = '\0'; /* finaliza a palavra */ 
 strcat(frase_res, palavra); 
 strcat(frase_res, " "); 
 strcat(frase_res, palavra); 
 strcat(frase_res, " "); 
 strcpy(palavra, "\0"); /* reinicializa a variável palavra */ 
 cont = 0; 
 } 
 } 
 puts(frase_res); 
} 
 7 
3) Faça um programa C que: 
• leia um vetor de N nomes; 
• leia um vetor de N sobrenomes; 
• concatene cada nome do vetor de nomes com cada sobrenome do vetor de 
sobrenomes, gerando um novo vetor de N nomes_sobrenomes (colocar um espaço 
em branco entre o nome e o sobrenome); 
• ler um determinado nome e sobrenome e procurar no vetor de nomes_sobrenomes. 
Caso seja encontrado, escrever a posiçãoem que está localizado, caso contrário, 
avisar que não foi encontrado. 
 
#include <stdio.h> 
#include <string.h> 
 
#define N 3 
#define MAX 15 
#define MAXRES 2*MAX+1 
 
main() 
{ 
 char nomes[N][MAX], sobrenomes[N][MAX], vet_res[N][MAXRES], 
 nome[MAX], sobrenome[MAX], res[MAXRES]; 
 int i, achou; 
 /* Carrega o vetor de nomes e o vetor de sobrenomes */ 
 for (i = 0; i < N; i++) 
 { 
 printf(“Entre com um nome: ”); 
 gets(nomes[i]); 
 printf(“Entre com o sobrenome: ”); 
 gets(sobrenomes[i]); 
 } 
 /* Gera o vetor de nomes_sobrenomes */ 
 for (i = 0; i < N; i++) 
 { 
 strcpy(vet_res[i], nomes[i]); 
 strcat(vet_res[i], “ ”); 
 strcat(vet_res[i], sobrenomes[i]); 
 } 
 /* Lê um nome e um sobrenome para a pesquisa */ 
 printf(“Digite um nome para a pesquisa: ”); 
 gets(nome); 
 printf(“Digite o sobrenome: ”); 
 gets(sobrenome); 
 /* Concatena o nome e o sobrenome para a pesquisa */ 
 strcpy(res, nome); 
 strcat(res, “ ”); 
 strcat(res, sobrenome); 
 /* Inicia a pesquisa */ 
 achou = 0; 
 i = 0; 
 while (achou == 0 && i < N) 
 if (strcmp(vet_res[i], res) == 0) 
 achou = 1; 
 else i++; 
 if (achou == 1) 
 printf(“Posição = %d”, i); 
 else printf(“Não encontrou”); 
} 
 8 
7 Exercícios de Fixação 
1) Faça um programa C que leia uma frase, calcule e mostre a quantidade de palavras da 
frase. 
2) Faça um programa C que leia duas frases e gere uma terceira frase que contenha a 
intercalação das palavras das duas frases lidas. No final escreva a frase resultante. 
Exemplo: 
 Frase1: hoje está um belo dia 
 Frase2: talvez chova amanhã 
 Saída: hoje talvez está chova um amanhã belo dia 
3) Faça um programa C para criptografar uma frase dada pelo usuário, sendo que a 
criptografia consiste em inverter a frase letra por letra. No final escreva a frase 
criptografada. 
Exemplo: 
 Frase: eu estou na escola 
 Saída: alocse an uotse ue 
4) Faça um programa C que leia o nome completo de uma pessoa e reescreva-o de acordo 
com os exemplos a seguir: 
 Nome: Ana Correia 
 Saída: Correia, A. 
 
Nome: Maria Silva Costa 
 Saída: Costa, M. S. 
 
 Nome: João Carlos Gomes Marques 
 Saída: Marques, J. C. G. 
5) Repetir o exercício 4, considerando um vetor de N nomes de pessoas.

Outros materiais