Strings em C++
Hi,
Declarar, concatenar e imprimir strings em Delphi, Visual Basic, Python, Perl, dentre outras linguagens, são tarefas relativamente simples.
Em C, são um pouco mais complexas. Veja:
#include <stdio.h>
int main()
{
char minha_string[15] = "Minha string!";
printf("%s",minha_string);
return 0;
}
Para concatenar strings em C, teríamos que fazer:
#include <stdio.h>
#include <string.h> // para usar strcat()
int main()
{
char minha_string[15] = "Minha";
strcat(minha_string," String!");
printf("%s",minha_string);
return 0;
}
Em C, não poderíamos fazer:
#include <stdio.h>
int main()
{
char minha_string[15];
minha_string = "Minha String!"; // errado
printf("%s",minha_string);
return 0;
}
Uma forma alternativa seria:
#include <stdio.h>
#include <string.h> // para usar strcpy()
int main()
{
char minha_string[15];
strcpy(minha_string,"Minha String!"); // Correto
printf("%s",minha_string);
return 0;
}
Em C++,podemos trabalhar com strings de uma forma mais fácil, semelhante à forma como trabalhamos com strings em Delphi ou Visual Basic, por exemplo.
Vejamos como declarar uma string em C++:
#include <iostream>
using namespace std; // simplificar uso de funções, exemplo: std::cout = cout; std::cin = cin;
int main()
{
string minha_string;
return 0;
}
Bem simples não?
Podemos inicializar strings em C++ de três formas diferentes:
1)
#include <iostream>
using namespace std;
int main()
{
string minha_string = "String!"; // ou string minha_string("String!");
cout << minha_string; // Imprime: String!
return 0;
}
No método acima, simplesmente inicializamos a string da mesma forma como fazemos em C.
2)
#include <iostream>
using namespace std;
int main()
{
string minha_string(5,'A');
cout << minha_string; // Imprime: AAAAA
return 0;
}
A declaração acima faz com que "minha_string" seja preenchida com 5 elementos - o caractere 'A'.
A sintaxe básica seria:
3)
#include <iostream>
using namespace std;
int main()
{
string minha_string("123ABC",1,4);
cout << minha_string; // Imprime: 23AB
return 0;
}
O método acima declara uma string contendo a string formada a partir do caractere na posição 1 da string "123ABC" (o caractere '2'), contendo 4 caracteres.
Lolz, confuso não?
Vejamos:
string minha_string = "ABCDEF";
Esta string possui 5 caracteres. O primeiro caractere está na posição 0, o segundo na posição 1, etc.
Veja o esquema:
Quando, no exemplo acima, fazemos:
string minha_string("123ABC",1,4);
A string "minha_string" irá conter a substring formada a partir do caractere '2' - já que ele está na posição 1 - até que a string principal (no caso "minha_string") tenha 4 caracteres: "23AB".
A sintaxe básica seria:
Ao contrário da linguagem C, em C++, podemos atribuir/alterar o valor de uma string utilizando o operador
=. Veja:
#include <iostream>
using namespace std;
int main()
{
string str1,str2;
str1 = "Valor1";
cout << str1 << endl; // Utilizou-se "endl" para imprimir uma quebra de linha; equivale a '\n'.
str2 = "Valor2";
cout << str1 << endl;
return 0;
}
O programa atribui o valor "Valor1" à string "str1" e mostra o seu valor. Em seguida, o valor é alterado para "Valor2" e novamente é mostrado na tela.
Pode-se facilmente concatenar strings utilizando o operador
+. Vejamos diferentes exemplos:
1)
#include <iostream>
using namespace std;
int main()
{
string str1,str2;
str1 = "Apenas mais";
str2 = " outra string";
str1 = str1 + str2; // ou: str1 += str2
cout << str1 << endl;
return 0;
}
O program acima concatena duas strings definidas.
2)
#include <iostream>
using namespace std;
int main()
{
string str1;
str1 = "Apenas mais";
str1 = str1 + " outra string";
cout << str1 << endl;
return 0;
}
O program acima concatena à string "str1" uma outra string : "outra string".
3)
#include <iostream>
using namespace std;
int main()
{
string str1,str2;
str1 = "Apenas";
str2 = " mais";
str1 = str1 + str2 + " outra string";
cout << str1 << endl;
return 0;
}
Há a concatenação das strings "str1" e "str2", e logo após, o resultado é unido à string " outra string".
4)
#include <iostream>
using namespace std;
int main()
{
string str1;
str1 = "Caractere: ";
str1 = str1 + 'A';
cout << str1 << endl;
return 0;
}
O programa retornaria "Caractere: A". Uma string é concatenada com um caractere =)
5)
#include <iostream>
using namespace std;
int main()
{
string str1 = "String em C++\n"; // '\n' = quebra de linha
char str2[] = "string em C";
str1 = str1 + str2;
cout << str1 << endl;
return 0;
}
Acima, unimos uma string em C++ com uma string em C.
Analisando os exemplos acima, poderíamos fazer o seguinte esquema:
A única observação é que não podemos fazer:
Além do operador
+ existe uma outra forma de concatenar strings: utilizando o método
append. Veja:
Veja:
#include <iostream>
using namespace std;
int main()
{
string str1,str2;
str1 = "XXX";
str2 = "YYY";
str1.append(str2); // Concatena str1 com str2
cout << str1;
return 0;
}
Outro exemplo:
#include <iostream>
using namespace std;
int main()
{
string str1;
str1 = "XXX";
str1.append("YYY"); // Concatena str1 com a string "YYY"
cout << str1;
return 0;
}
Além do operador
+, podemos utilizar os operadores:
<,
<=,
==,
!=,
> e
>= para comparar strings.
Veja:
Exemplo 1: Verificando se as strings são iguais:
#include <iostream>
using namespace std;
int main()
{
string str1,str2;
cout << "Digite uma string: ";
cin >> str1; // Obtém string digitada
cout << "Digite outra string: ";
cin >> str2; // Obtém outra string digitada
if(str1 == str2)
cout << "As string sao iguais";
else
cout << "\nAs string sao diferentes";
return 0;
}
Note que, para atribuir um valor digitado a uma string, usamos:
cin >> NOME_STRING.
Exemplo 2: Verificando se uma string é maior ou menor que outra
#include <iostream>
using namespace std;
int main()
{
string str1,str2;
cout << "Digite uma string: ";
cin >> str1; // Obtém string digitada
cout << "Digite outra string: ";
cin >> str2; // Obtém outra string digitada
if(str1 < str2)
cout << "A string: " << str1 << " e' menor do que a string " << str2 ;
else
cout << "A string: " << str1 << " e' maior ou igual a string " << str2 ;
return 0;
}
Note que podemos mostrar vários valores na tela através da função
cout, utilizando o operador binário
<<.
Ainda abordando o exemplo acima, imagine que as string sejam: "123" e "12345".
A string "123" seria menor do que "12345", correto? Mas se por acaso tivéssimos: "123" e "abc"? Ambas têm o mesmo tamanho - e caracteres - mas uma é menor que a outra? Sim, "123" é menor do que "abc".
Quando temos a situação acima, o programa verifica cada elemento da string para dizer se esta é maior ou menor que outra, através dos respectivos códigos ASCII de cada elemento. Observe o esquema:
Quando o programa se depara com a comparação 49 < 97, automaticamente é retornado que a string "123" é menor do que "abc", já que não há necessidade de analisar os outros elementos =)
Vejamos agora alguns métodos relacionados a strings em C++:
1) Retornado o caractere de uma determinada posição
#include <iostream>
using namespace std;
int main()
{
string str1;
str1 = "LOL!";
cout << str1.at(0);
return 0;
}
O programa retornaria "L".
A sintaxe básica seria:
2) Retornado uma string em C
#include <iostream>
#include <stdio.h> // para usar printf()
using namespace std;
int main()
{
string str1;
str1 = "LOL!";
printf("%s",str1.c_str());
return 0;
}
3) Limpando uma string
#include <iostream>
using namespace std;
int main()
{
string str1;
str1 = "LOL!";
cout << str1;
str1.clear();
cout << str1;
return 0;
}
4) Verificando se uma string está vazia
#include <iostream>
using namespace std;
int main()
{
string str1;
if(str1.empty())
cout << "Vazia!";
return 0;
}
5) Localizando a posição da primeira ocorrência de um caractere em uma string:
#include <iostream>
using namespace std;
int main()
{
string str1;
str1 = "123xABC";
int pos = str1.find('x');
if(pos != string::npos)
cout << "Posicao de 'x' na string: " << pos;
else
cout << "O caractere 'x' nao foi encontrado!";
return 0;
}
A constante
string::npos é retornada quando o caractere não é encontrado.
6) Localizando a posição da primeira ocorrência de uma substring em uma string:
#include <iostream>
using namespace std;
int main()
{
string str1;
str1 = "123LOLABC";
int pos = str1.find_first_of("LOL");
if(pos != string::npos)
cout << "Posicao de 'LOL' na string: " << pos;
else
cout << "A string 'LOL' nao foi encontrado!";
return 0;
}
A constante
string::npos é retornada quando a substring não é encontrada.
6) Localizando a posição da última ocorrência de uma substring em uma string
#include <iostream>
using namespace std;
int main()
{
string str1;
str1 = "123LOLABC";
int pos = str1.find_last_of("LOL");
if(pos != string::npos)
cout << "Posicao de 'LOL' na string: " << pos;
else
cout << "A string 'LOL' nao foi encontrado!";
return 0;
}
A constante
string::npos é retornada quando a substring não é encontrada.
7) Retornado o tamanho de uma string
#include <iostream>
using namespace std;
int main()
{
string str1;
cout << "Digite uma string: ";
cin >> str1;
cout << "A string '" << str1 << "' possui " << str1.length() << " caractere(s)";
return 0;
}
Pode utilizar o método size() ao invés de length():
#include <iostream>
using namespace std;
int main()
{
string str1;
cout << "Digite uma string: ";
cin >> str1;
cout << "A string '" << str1 << "' possui " << str1.size() << " caractere(s)";
return 0;
}
Adicionando um caractere no final da string
#include <iostream>
using namespace std;
int main()
{
string str1;
str1 = "AB";
str1.push_back('C');
cout << str1;
return 0;
}
9) Substituindo uma substring por outra
#include <iostream>
using namespace std;
int main()
{
string str1;
str1 = "XXX123";
str1.replace(0,3,"LOL"); // Substitui 3 caracteres começando pelo primeiro - posição 0
cout << str1;
return 0;
}
A sintaxe básica seria:
10) Retornando uma determinada quantidade de caracteres de uma string
#include <iostream>
using namespace std;
int main()
{
string str1,str2;
str1 = "Mais um outro exemplo de uma string.";
str2 = str1.substr(8);
cout << str2;
return 0;
}
11) Trocando o conteúdo de uma string por outra
#include <iostream>
using namespace std;
int main()
{
string str1,str2;
str1 = "string1";
str2 = "string2";
cout << "str1 = " << str1 << endl << "str2 = " << str2 << endl << endl;
str1.swap(str2);
cout << "str1 = " << str1 << endl << "str2 = " << str2 << endl << endl;
return 0;
}
O programa retorna:
Bem, existem outros métodos, porém, estes são os principais...
Autor:
Dark_SideK.O