CLASSE STRING 02
Esta aula dará continuidade ao estudo da classe string, apresentando mais algumas características e métodos dessa classe muito útil.
A
CESSANDOC
ARACTERESI
NDIVIDUAISPara acessar caracteres individuais em um objeto string, a sintaxe utilizada é muito semelhante às strings do C-ANSI. Estude o exemplo abaixo:
#include <iostream> #include <string> using namespace std;
int main(void) {
string str1("TESTANDO");
cout << "String Criada: " << str1 << endl;
cout << str1[5] << endl; //acessando o sexto caractere... system("PAUSE");
return 0; }
Progra ma 1 Acessando ca ra cteres indi vi duais.
Atente que, para uma string com n caracteres, a indexação da string começa em 0 e vai até n - 1.
É possível utilizar uma função membro para realizar a mesma tarefa, basta utilizar o método at. Estude o Programa 2.
#include <iostream> #include <string> using namespace std;
int main(void) {
string str1("TESTANDO");
cout << "String Criada: " << str1 << endl;
cout << str1.at(5) << endl; //acessando o sexto caractere... system("PAUSE");
return 0; }
Progra ma 2 Acessando ca ra cteres indi vi duais utilizando método.
A vantagem em se utilizar o método at é que a classe verifica limites, impedindo o acesso
a áreas fora dos limites da string.
O
M
ÉTODOS
WAPNa classe string existe um método dedicado para trocar o valor de uma string pela outra. Trata-se do método swap. A utilização deste método pode ser particularmente interessante
#include <iostream> #include <string> using namespace std;
int main(void) {
string str1("STRING A"); string str2("STRING B"); str1.swap(str2);
cout << "str1 = " << str1 << endl; cout << "str2 = " << str2 << endl; system("PAUSE");
return 0; }
Progra ma 3 Swap.
M
ÉTODOS PARAM
ODIFICAÇÃO EV
ERIFICAÇÃO DOT
AMANHO DAS
TRINGUma gama de métodos permite obter e modificar as características relacionadas ao tamanho da string. Como fora visto, a função-membro length, exatamente com o método size,
retorna o tamanho da string (sem contar qualquer terminador nulo). Dentro desse contexto existe uma função que permite alocar mais memória para uma string. Trata-se do método resize.
Estude atentamente o Programa 3 e o resultado ao se executar o mesmo.
#include <iostream> #include <string> using namespace std;
int main(void) {
string str1("STRING A");
cout << "str1 = " << str1 << endl;
cout << "Tamanho da String = " << str1.size() << endl;
str1.resize(str1.size() + 5);
cout << "str1 = " << str1 << endl;
cout << "Tamanho da String = " << str1.size() << endl; system("PAUSE");
return 0; }
Progra ma 4 Métodos size e resize.
Percebe-se que ao se imprimir str1 após aumentar sua capacidade não houve
modificação alguma no conteúdo. Isso ocorre pois a função resize preenche os caracteres com
caracteres nulos.
#include <iostream> #include <string> using namespace std;
int main(void) {
string str1;
cout << "Tamanho da String = " << str1.size() << endl;
cout << "Tamanho maximo possivel = " << str1.max_size() << endl; system("PAUSE");
return 0; }
Progra ma 5 Método ma x_si ze.
Existe outro método que retorna se a string está ou não está vazia. Trata-se do método
empty, que retorna verdadeiro caso a string esteja vazia e falso caso a string não esteja vazia.
Estude o Programa 6. Veja como outro método é utilizado. O método clear limpa o
conteúdo de uma string.
#include <iostream> #include <string> using namespace std;
int main(void) {
string str1;
if(str1.empty()) cout << "str1 esta vazia" << endl; else cout << "str1 nao vazia" << endl;
str1 = "OPA";
if(str1.empty()) cout << "str1 esta vazia" << endl; else cout << "str1 nao vazia" << endl;
str1.clear(); //método que limpa a string
if(str1.empty()) cout << "str1 esta vazia" << endl; else cout << "str1 nao vazia" << endl;
system("PAUSE"); return 0;
}
Progra ma 6 Método empty.
M
ÉTODOS PARAB
USCA DEC
ARACTERES ES
TRINGSA classe string disponibiliza muitos métodos que realizam buscas em strings. O método
find verifica se a string passada como seu parâmetro está contida em seu objeto. Em caso
positivo, o método retorna o índice onde ocorreu a coincidência. Em caso negativo, npos é
retornado. npos é um atributo constante público da classe string, que convertida em int
#include <iostream> #include <string> using namespace std;
int main(void) {
string str1("ABACATE"); int a;
a = str1.find("AC");
if(a != str1.npos) //npos é publica... geralmente npos é -1... {
cout << "Encontrada ocorrencia de AC na string " << str1; cout << " no indice " << a << endl;
}
else cout << "nenhuma ocorrencia\n"; system("PAUSE");
return 0; }
Progra ma 7 Método fi nd.
Existem outros métodos dedicados para busca. O método rfind busca a primeira
ocorrência de uma string, como find, porém rfind “varre” a string de trás pra frente.
find_first_of e find_last_of procuram, respectivamente, a primeira e última
ocorrência de um conjunto de caracteres em uma string. Os caracteres de interesse da busca são inseridos em uma string como parâmetros do método. Existem ainda dois métodos que procuram a não ocorrência de caracteres. Trata-se das funções membro find_first_not_of e find_last_not_of. Estude com cuidado o Programa 7.
#include <iostream> #include <string> using namespace std; int main(void) {
string str1("ABACZAS.XCAZB.ACYC"); int a;
cout << str1 << endl;
cout << "Primeira ocorrencia de AC: " << str1.find("AC") << endl; cout << "Ultima ocorrencia de AC: "<< str1.rfind("AC") << endl;
cout << "Primeira ocorrencia de Z,X,Y ou . : " << str1.find_first_of("XYZ.") << endl; cout << "Ultima ocorrencia de Z,X,Y ou . : " << str1.find_last_of("XYZ.") << endl;
cout << "Primeira nao ocorrencia de A,B,C ou .: " << str1.find_first_not_of("ABC.") << endl; cout << "Ultima nao ocorrencia de A,B,C ou .: " << str1.find_last_not_of("ABC.") << endl; system("PAUSE");
return 0; }
Progra ma 8 Outros métodos de busca .
M
ODIFICANDOS
TRINGSO método erase apaga a string a partir de um índice passado como parâmetro da função.
O método replace troca os caracteres da string, a partir de um ponto especificado. Observe os
exemplos abaixo.
#include <iostream> #include <string> using namespace std;
int main(void) {
string str1("ABACZAS.XCAZB.ACYC"),s1,s2,s3; int a,b;
a = str1.find("."); //obtém indice do primeiro ponto b = str1.rfind("."); //obtém indice do segundo ponto cout << str1 << endl;
s1 = str1;
s1.erase(a); //apaga tudo do primeiro ponto pra frente... cout << s1 << endl;
s2 = str1;
s2.erase(b); //apaga tudo do segundo ponto pra frente...
s2.erase(0,(a+1)); //apaga de do indice zero (a+1) caracteres...
cout << s2 << endl; s3 = str1;
s3.erase(0,(b+1)); //apaga de do indice zero (b+1) caracteres...
cout << s3 << endl; system("PAUSE"); return 0;
}
Progra ma 9 Método erase.
#include <iostream> #include <string> using namespace std;
int main(void) {
string str1("TESTANDO REPLACE"); int a;
str1.replace(9,3,"OPA"); //(pos_ini,quantos_caracteres,string) cout << str1 << endl;
a = str1.find("OPA"); a += 3;
str1.erase(a);
cout << str1 << endl; system("PAUSE"); return 0;
}
Progra ma 10 Método repla ce.
#include <iostream> #include <string> using namespace std;
int main(void) {
string str1("TESTANDO INSERT"); str1.insert(9,"OPA ");
cout << str1 << endl; system("PAUSE"); return 0;
}
Progra ma 11 Método insert.
Exercício 1 Crie um programa que leia do teclado duas strings. Suponha que essas duas strings sejam um número de série de um produto, sendo este composto por duas partes, a primeira representa o tipo da peça, e a segunda o lote. As duas partes do código são demarcados por um caractere ponto. Os campos não possuem, necessariamente, o mesmo tamanho. Faça um programa que compara as strings e informa se as peças pertencem ao mesmo lote e/ou são do mesmo tipo. Utilize as funções de busca para localizar o caractere ponto.
Exercício 2 Escreva um programa que ordena alfabeticamente um vetor de strings. O vetor deverá ser obtido via teclado. Utilize apenas letras maiúsculas ou apenas minúsculas.
Exercício 3 Escreva funções para extrair a parte real e imaginária de um número complexo. O número complexo deverá ser passado para as funções como uma string, no formato: a+jb. Uma função deverá retornar a parte real, e a outra deverá retornar a parte imaginária. Para realizar a conversão de uma string para um float, baseie-se no exemplo abaixo:
#include <iostream> #include <string> #include <cstdlib> using namespace std;
int main(void) {
string s = "1.8734"; float a;
a = atof(s.data()); //s.data() retorna um ponteiro para char para a string cout << a << endl;
system("PAUSE"); return 0;
}
Progra ma 12 Conversão de s tring pa ra floa t.