Baixe o app para aproveitar ainda mais
Prévia do material em texto
Strings - Funções de Tratamento de Caractere String • Strings são utilizadas para representar sequências de caracteres, como frases, nomes de pessoas, cidades, ruas, países, etc. 03/08/13 3 Funções de Tratamento de Caractere � Pode-se definir um vetor de tipo char, onde cada posição representa um caractere. � O fim da cadeia é identificado com o caractere nulo, por meio do ‘\0’. � Este tipo de vetor possui o nome de string. 4 Declaração de String � char nome[7]; � char nome[ ] = {'U', 'N', 'I', 'F', 'E', 'I', '\0'}; � char nome[ ] = "UNIFEI"; � char nome[7] = "UNIFEI"; 5 Declaração de String � É preciso declarar vetores de caracteres como sendo um caracter mais longo que a maior string que eles devem guardar (devido ao caracter nulo). � A linguagem C/C++ possui funções para manipulação de vetores de caracteres presentes na biblioteca string.h ou cstring. Para consultar funções dessa biblioteca acesse: http://www.cplusplus.com/reference/clibrary/cstring/ 6 Manipulando Cadeias de Caracteres � strlen (str1) – obtém o tamanho de uma cadeia de caracteres str1 (o caractere nulo não é considerado); char nome[19] = "Teodomiro Santiago"; int tamanho = strlen(nome); for (int i =0; i < tamanho ; i++){ cout<<"\nCaracter n."<<i+1<<":"<<nome[i]; } 7 Manipulando Cadeias de Caracteres � strcat (str1, str2) – concatena a cadeia identificada por str2 à cadeia str1. A segunda permanece inalterada. char stringDestino[40] = "Prezado Sr. "; char stringOrigem[] = "Joao Pereira"; strcat(stringDestino, stringOrigem); cout << "String Destino: " << stringDestino <<"\n"; cout << "String Origem: "<< stringOrigem; A saída da tela será: String Destino: Prezado Sr. Joao Pereira String Origem: Joao Pereira 8 Manipulando Cadeias de Caracteres � strcmp (str1, str2) – compara duas cadeias de caracteres e retorna um número inteiro, que pode ser (maiúscula e minúscula são diferentes): � Zero – se as duas cadeias são iguais; � Número menor que 0 – cadeia str1 for alfabeticamente menor que str2; � Número maior que 0 – cadeia str1 for alfabeticamente maior que str2. 9 Manipulando Cadeias de Caracteres char cor[] = "azul"; char resposta[10]; cout << "Qual e a cor do ceu? \n"; gets(resposta); cout << strcmp(cor, resposta); Caso o usuário insira como resposta azul, o valor impresso na tela será 0, para qualquer outra entrada, o valor será diferente de 0. 10 Manipulando Cadeias de Caracteres � stricmp (str1, str2) – compara duas cadeias de caracteres e retorna um número inteiro que pode ser (maiúscula e minúscula são iguais): � Zero – se as duas cadeias são iguais; � Número menor que 0 – cadeia str1 for alfabeticamente menor que str2; � Número maior que 0 – cadeia str1 for alfabeticamente maior que str2. 11 Manipulando Cadeias de Caracteres � strcpy (str1, str2) – Copia a cadeia str2 para a cadeia str1; char stringDestino[] = "Prezado Sr. "; char stringOrigem[] = "Joao Pereira"; strcpy(stringDestino, stringOrigem); cout << "String Destino: " << stringDestino <<"\n"; cout << "String Origem: "<< stringOrigem; A saída exibida na tela é: String Destino: Joao Pereira String Origem: Joao Pereira 12 Manipulando Cadeias de Caracteres � gets – leitura de string do teclado, definida na biblioteca cstdio. Ela captura todos os caracteres digitados, inclusive os espaços em branco, até que seja pressionada a tecla Enter. � No Windows você deverá usar a função fflush(stdin) antes de chamar a gets() para limpar o buffer de entrada. fflush(stdin); // limpa o buffer de entrada gets (nome_da_string); Manipulando Cadeias de Caracteres - Exemplo /*ProgC072.cpp - Programa que le uma string e imprima os caracteres separadamente na tela.*/ #include <cstring> #include <cstdio> #include <iostream> using namespace std; int main(){ char nome[30]; cout << "Escreva seu nome completo:\n "; fflush(stdin); gets(nome); int tamanho = strlen(nome); for (int i =0; i < tamanho ; i++){ cout<<"\nCaracter n." << i+1 << ": " << nome[i]; } return 0;} Limpa o buffer Recupera string do teclado Recupera o Tamanho do string Tratamento como um vetor 14 Manipulando Cadeias de Caracteres � strlwr() – converte os caracteres da string em letras minúsculas � strupr() - converte os caracteres da string em letras maiúsculas Manipulando Cadeias de Caracteres - Exemplo /*ProgCo73.cpp - Conversão de strings - maiúscula e minúscula*/ #include <iostream> #include <string.h> using namespace std; int main(){ char palavra1[7] = "BrASiL"; cout << "String antes da conversao: " << palavra1 << endl; strupr(palavra1); cout << "\nString depois da conversao usando funcao strupr(): " << palavra1; strlwr(palavra1); cout << "\nString depois da conversao usando funcao strlwr(): " << palavra1; return 0; } Conversão para maiúscula Conversão para minúscula 16 Manipulando Cadeias de Caracteres - Exemplo /* Prog074.cpp - Programa que apresenta a utilização de funções de manipulação de caracteres*/ #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; int main() { char nome[ ] = {'P', 'r', 'o', 'g', 'r', 'a', 'm', 'a', '\0'}; char nome1[ ] = "Programa"; char nome2[100], nome3[100]; int tamanho; cout << "Variavel nome: " << nome << "\n"; cout << "Variavel nome1: " <<nome1<<"\n"; strcpy(nome2, "Programa"); cout<<"Variavel nome2: "<<nome2<<"\n\n"; cout << "Digite o sobrenome: "; gets(nome3); cout<<"Sobrenome digitado:"<<nome3<<"\n"; cout << "Digite o primeiro nome: "; cin >> nome2; cout<<"Nome digitado: "<<nome2<<"\n\n"; if (strcmp(nome2, "Fabiana") == 0) cout<<"Nome digitado foi Fabiana"<<"\n\n"; else cout<<"Nome digitado nao foi Fabiana, foi:“ <<nome2<<"\n\n"; tamanho = strlen(nome3); cout<<"Tamanho do Sobrenome e: “ <<tamanho<<"\n"; strcat (nome2, " "); strcat (nome2, nome3); cout<<"Nome Completo:"<<nome2<<"\n"; system ("PAUSE > 0"); return 0; } Bibliotecas. Declaração e Inicialização. Cópia Recupera do teclado com espaço Recupera sem espaço Comparação Tamanho Concatenação 17 Manipulando Cadeias de Caracteres - Exemplo /*ProgC075 - Programa que trabalha com strings*/ #include <iostream> #include <iomanip> #include <cstdlib> using namespace std; int main(){ char nome[30]; cout << "\nDigite o seu nome: "; cin >> setw(30) >> nome; cout << "\nSeu nome e: " << nome << "\n"; system("pause"); return 0; } Limita a quantidade de caracteres a serem recuperados. 18 Funçao getline � O problema com o exemplo anterior é que o objeto cin entende que um espaço em branco termina a entrada. � Neste caso, a função cin.getline() deve ser utilizada. A função cin.getline() aceita três argumentos um vetor de caracteres em que a linha de texto será armazenada, um comprimento e um caractere delimitador. � Por exemplo, o segmento de programa: char frase[80]; std::cin.getline(frase, 80, \n); � declara o vetor frase de 80 caracteres e então lê uma linha de texto do teclado. A função interrompe a leitura dos caracteres quando é encontrado o caractere delimitador \n, quando o indicador de fim de arquivo é inserido pelo usuário ou quando o número de caracteres lidos até então é um a menos que o comprimento especificado no segundo argumento. 19 Exemplo cin.getline /*ProgC076 - Programa que trabalha com strings*/ #include <iostream> #include <cstdlib> int main(){ char nome[30]; std::cout << "\nDigite o seu nome: "; std::cin.getline(nome, 30, '\n'); std::cout << "\nSeu nome e: " << nome << "\n"; system("pause"); return 0; } Pega tudo digitado até encontrar o enterou até 30 caracteres. Passando strings como parâmetros para funções • Para passar uma string como parâmetro para uma função utilizamos o mesmo processo aprendido em vetores. void imprimeString(char string[]) { int tamanho = strlen(string); for (int i = 0; i < tamanho ; i++) cout<<"\nCaracter n." << i+1 << ": " << string[i]; } 03/08/13 Passando strings como parâmetros para funções //ProgC077 - Funções com string #include <iostream> #include <string.h> #include <cstdio> using namespace std; void leString(char string[]); void imprimeString(char string[]); int contaLetra (char string[], char letra); char ultimaLetra (char string[]); int main(){ char palavra[60]; leString(palavra); imprimeString(palavra); cout<<"\nQuantidade de letras 'h': “ <<contaLetra(palavra, 'h'); cout<<"\nUltima letra digitada: “ <<ultimaLetra(palavra); return 0; } void leString(char string[]){ cout << "Digite uma string->"; fflush(stdin); gets(string);} void imprimeString(char string[]){ int tamanho = strlen(string); for (int i = 0; i < tamanho ; i++) cout<<"\nCaracter n." << i + 1 << ": " << string[i];} int contaLetra (char string[], char letra){ int contador = 0; int tamanho = strlen(string); for (int i = 0; i < tamanho ; i++) { if (string[i] == letra) contador++; } return contador;} char ultimaLetra (char string[]){ return string[strlen(string)-1];} Protótipos Chamadas das funções Limpa buffer e pega string do teclado Tamanho da string Tratamento como vetor 22 Exercícios � Fazer um programa que leia uma frase, calcule e mostre a quantidade de letras da frase digitada. � Fazer um programa que leia uma frase, calcule e mostre a quantidade de palavras da frase digitada.
Compartilhar