Strings em C++

Iniciado por Network-Coder, 29 de Dezembro de 2006, 19:50

tópico anterior - próximo tópico

Network-Coder

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;
}


8) 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_Side

K.O

irc.freenode.net - #nerd_republic go! go! go!