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:
Para concatenar strings em C, teràamos que fazer:Código:#include <stdio.h> int main() { char minha_string[15] = "Minha string!"; printf("%s",minha_string); return 0; }
Em C, não poderàamos fazer:Código:#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; }
Uma forma alternativa seria:Código:#include <stdio.h> int main() { char minha_string[15]; minha_string = "Minha String!"; // errado 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.Código:#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; }
Vejamos como declarar uma string em C++:
Bem simples não?Código:#include <iostream> using namespace std; // simplificar uso de funções, exemplo: std::cout = cout; std::cin = cin; int main() { string minha_string; return 0; }
Podemos inicializar strings em C++ de três formas diferentes:
1)
No método acima, simplesmente inicializamos a string da mesma forma como fazemos em C.Código:#include <iostream> using namespace std; int main() { string minha_string = "String!"; // ou string minha_string("String!"); cout << minha_string; // Imprime: String! return 0; }
2)
A declaração acima faz com que "minha_string" seja preenchida com 5 elementos - o caractere 'A'.Código:#include <iostream> using namespace std; int main() { string minha_string(5,'A'); cout << minha_string; // Imprime: AAAAA return 0; }
A sintaxe bísica seria:
string nome_string(NUMERO,CARACTERE);
NUMERO:
número de elementos;
CARACTERE:
caractere a ser repetido na string.
3)
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.Código:#include <iostream> using namespace std; int main() { string minha_string("123ABC",1,4); cout << minha_string; // Imprime: 23AB return 0; }
Lolz, confuso não?
Vejamos:
Esta string possui 5 caracteres. O primeiro caractere estí na posição 0, o segundo na posição 1, etc.Código:string minha_string = "ABCDEF";
Veja o esquema:
Quando, no exemplo acima, fazemos:'A' = 0;
'B' = 1;
'C' = 2;
'D' = 3;
'E' = 4;
Código: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:string nome_string(STRING,POSICAO_INICIAL,TAMANHO);
STRING:
a string da qual os caracteres serão retornados;
POSICAO_INICIAL:
posição do primeiro caractere a ser retornado, começando por ZERO;
TAMANHO:
o tamanho que "nome_string" deverí ter.
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.Código:#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; }
Pode-se facilmente concatenar strings utilizando o operador +. Vejamos diferentes exemplos:
1)
O program acima concatena duas strings definidas.Código:#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; }
2)
O program acima concatena à string "str1" uma outra string : "outra string".Código:#include <iostream> using namespace std; int main() { string str1; str1 = "Apenas mais"; str1 = str1 + " outra string"; cout << str1 << endl; return 0; }
3)
Hí a concatenação das strings "str1" e "str2", e logo após, o resultado é unido à string " outra string".Código:#include <iostream> using namespace std; int main() { string str1,str2; str1 = "Apenas"; str2 = " mais"; str1 = str1 + str2 + " outra string"; cout << str1 << endl; return 0; }
4)
O programa retornaria "Caractere: A". Uma string é concatenada com um caractere =)Código:#include <iostream> using namespace std; int main() { string str1; str1 = "Caractere: "; str1 = str1 + 'A'; cout << str1 << endl; return 0; }
5)
Acima, unimos uma string em C++ com uma string em C.Código:#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; }
Analisando os exemplos acima, poderàamos fazer o seguinte esquema:
A única observação é que não podemos fazer:string str;
str = "STRING1";
str = str + "STRING2";
string str,str2;
str = "STRING1";
str2 = "STRING2";
str = str + str2;
string str,str2;
str = "STRING1";
str2 = "STRING2";
str = str + str2 + "STRING3";
string str;
str = "STRING1";
str = str + 'X'; // X = caractere
string str1 = "STRING1";
char str2[] = "STRING2"
str1 = str1 + str2;
Além do operador + existe uma outra forma de concatenar strings: utilizando o método append. Veja:string str = "lol";
char str2[] = "string";
str = str + str2 + "OUTRA STRING"; // não se pode concatenar um array com uma string através do operador +
Veja:
Outro exemplo:Código:#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; }
Além do operador +, podemos utilizar os operadores: <, <=, ==, !=, > e >= para comparar strings.Código:#include <iostream> using namespace std; int main() { string str1; str1 = "XXX"; str1.append("YYY"); // Concatena str1 com a string "YYY" cout << str1; return 0; }
Veja:
Exemplo 1: Verificando se as strings são iguais:
Note que, para atribuir um valor digitado a uma string, usamos: cin >> NOME_STRING.Código:#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; }
Exemplo 2: Verificando se uma string é maior ou menor que outra
Note que podemos mostrar vírios valores na tela através da função cout, utilizando o operador binírio <<.Código:#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; }
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 =)1 - 49
2 - 50
3 - 51
a - 97
b - 99
c - 98
Vejamos agora alguns métodos relacionados a strings em C++:
1) Retornado o caractere de uma determinada posição
O programa retornaria "L".Código:#include <iostream> using namespace std; int main() { string str1; str1 = "LOL!"; cout << str1.at(0); return 0; }
A sintaxe bísica seria:
2) Retornado uma string em Cstr.at(POS);
Onde POS é a posição do elemento na string, començando por ZERO.
3) Limpando uma stringCódigo:#include <iostream> #include <stdio.h> // para usar printf() using namespace std; int main() { string str1; str1 = "LOL!"; printf("%s",str1.c_str()); return 0; }
4) Verificando se uma string estí vaziaCódigo:#include <iostream> using namespace std; int main() { string str1; str1 = "LOL!"; cout << str1; str1.clear(); cout << str1; return 0; }
5) Localizando a posição da primeira ocorrência de um caractere em uma string:Código:#include <iostream> using namespace std; int main() { string str1; if(str1.empty()) cout << "Vazia!"; return 0; }
A constante string::npos é retornada quando o caractere não é encontrado.Código:#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; }
6) Localizando a posição da primeira ocorrência de uma substring em uma string:
A constante string::npos é retornada quando a substring não é encontrada.Código:#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; }
6) Localizando a posição da última ocorrência de uma substring em uma string
A constante string::npos é retornada quando a substring não é encontrada.Código:#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; }
7) Retornado o tamanho de uma string
Pode utilizar o método size() ao invés de length():Código:#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; }
8) Adicionando um caractere no final da stringCódigo:#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; }
9) Substituindo uma substring por outraCódigo:#include <iostream> using namespace std; int main() { string str1; str1 = "AB"; str1.push_back('C'); cout << str1; return 0; }
A sintaxe bísica seria:Código:#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; }
10) Retornando uma determinada quantidade de caracteres de uma stringstr.replace(POSICAO,NUMERO,SUBSTRING);
POSICAO:
posicao inicial da qual deve-se começar a substituição, começando por ZERO;
NUMERO:
número de caracteres que serão substituàdos;
SUBSTRING:
substring que irí substituir os caracteres.
11) Trocando o conteúdo de uma string por outraCódigo:#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; }
O programa retorna:Código:#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; }
Bem, existem outros métodos, porém, estes são os principais...str1 = string1
str2 = string2
str1 = string2
str2 = string1
É isso...
Bye =)



Responder com Citação
