String
Strings são estruturas de dados que representam sequências de elementos, sendo o mais comum a sequência de caracteres
(char). A biblioteca padrão provê uma série de funcionalidades para lidar com strings, a partir do header <string>.
É importante notar que sequências de caracteres dentro de aspas duplas (") não são do tipo string em C++. Considere
o exemplo abaixo:
#include <string>
int main()
{
auto word = "Exemplo"; // *Não* é do tipo std::string
auto other_word = std::string("Outro Exemplo"); // É do tipo std::string
// (A partir de C++14)
using namespace std::string_literals;
auto yet_another_word = "Mais um exemplo"s; // É do tipo std::string
return 0;
}
word não é do tipo std::string. Isso por que C++ não possui string como tipo primitivo da linguagem. Ao invés
disso, word possui tipo const char[8], que representa um "array de 8 elementos do tipo char" (7 caracteres na
palavra "Exemplo" + 1 caracter de fim de texto, representado por \0).
Por outro lado, other_word e yet_another_word são do tipo std::string.
A vantagem de utilizar std::string ao invés de const char[], é que ela provê várias funções e métodos de manipulação
e extração de dados para strings. Por exemplo, é possível concatenar duas std::strings utilizando o operador +, mas
não é possível fazer o mesmo com const char[]:
#include <string>
#include <iostream>
int main()
{
using namespace std::string_literals;
auto string1 = "Hello "s;
auto string2 = "World"s;
auto string3 = string1 + string2;
std::cout << string3 << "\n"; // Mostra "Hello World"
// O código abaixo produz um erro de compilação, pois não é possível
// somar duas variáveis do tipo `const char*`:
// auto var1 = "Hello ";
// auto var2 = "World";
// auto var3 = var1 + var2; // ERRO de compilação
return 0;
}
A partir desse momento, utiliza-se a palavra "string" para denotar std::string.
É possível converter strings de/para os tipos primitivos int e float, por meio de funções auxiliares. Esse tipo de
conversão é especialmente útil para traduzir inputs de usuário em dados numéricos. Exemplo:
#include <string>
#include <iostream>
int main()
{
using namespace std::string_literals;
auto value1 = "12"s;
auto value2 = "7"s;
auto string3 = value1 + value2; // Produz "127" (com tipo string)
auto value3 = std::stoi(value1) + std::stoi(value2); // Produz 19 (com tipo int)
std::cout << string3 << ", " << value3 << "\n"; // Mostra 127, 19
return 0;
}
Para converter strings para floats, pode-se utilizar std::stof. Para converter int e float para strings, pode-se
utilizar std::to_string. Uma lista extensa de funcionalidades para std::sring está disponível aqui.