Strings - Funções de
String
•
Strings são utilizadas para representar
sequências de caracteres, como
frases, nomes de pessoas, cidades,
ruas, países, etc.
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’.
Declaração de String
char nome[7];
char nome[ ] = {'U', 'N', 'I', 'F', 'E', 'I', '\0'};
char nome[ ] = "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:
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
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
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.
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
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
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
Manipulando Cadeias de
Caracteres
strlwr() – converte os caracteres da string em
letras minúsculas
strupr() - converte os caracteres da string em
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
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 << "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";
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.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
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 enter ou 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++)
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