std::string
¶
Initialization¶
#include <gtest/gtest.h>
#include <string>
TEST(string_suite, initialization)
{
std::string hello("Hello"); // <--- "const char*" ctor
std::string another_hello = hello; // <--- copy ctor
std::string who = "Joerg"; // <--- "const char*" ctor (assignment style)
}
Addition, And Such¶
#include <gtest/gtest.h>
#include <string>
TEST(string_suite, addition)
{
std::string hello = "Hello";
std::string who = "Joerg";
std::string greeting1 = hello + " " + who; // <--- inefficient
ASSERT_EQ(greeting1, "Hello Joerg");
std::string greeting2 = hello;
greeting2 += ' '; // <--- a little better
greeting2 += who; // <--- a little better
}
Conversion From String¶
// file:///tmp/jfasch-home/html/trainings/material/soup/c/020-types-operators-expressions/080-type-conversions/topic.html
// stol -> long
// stoll -> long long
#include <gtest/gtest.h>
#include <string>
TEST(string_suite, convert_to_signed_integer)
{
{
std::string numstr = "42";
int answer = std::stoi(numstr);
ASSERT_EQ(answer, 42);
}
{
std::string numstr = "42";
int answer = std::stoi(numstr, /*start pos*/0, /*base*/16);
ASSERT_EQ(answer, 66);
}
}
// file:///tmp/jfasch-home/html/trainings/material/soup/c/020-types-operators-expressions/080-type-conversions/topic.html
// stoull
// no stoui
// base, etc like signed
#include <gtest/gtest.h>
#include <string>
TEST(string_suite, convert_to_unsigned_integer)
{
{
std::string numstr = "42";
unsigned long answer = std::stoul(numstr);
ASSERT_EQ(answer, 42);
}
{
std::string numstr = "-42";
unsigned long answer = std::stoul(numstr); // <--- for sure not negative
(void)answer;
}
}
Conversion To String¶
// bring table:
// https://en.cppreference.com/w/cpp/string/basic_string/to_string
#include <gtest/gtest.h>
#include <string>
TEST(string_suite, convert_from_something)
{
int i = 42;
std::string i_str = std::to_string(i);
ASSERT_EQ(i_str, "42");
unsigned int ui = 42;
std::string ui_str = std::to_string(ui);
ASSERT_EQ(ui_str, "42");
double d = 42.666;
std::string d_str = std::to_string(d);
ASSERT_EQ(d_str, "42.666000"); // sprintf default precision is 6
}
Searching¶
#include <gtest/gtest.h>
#include <string>
TEST(string_suite, find)
{
std::string s = "Mississippi";
size_t pos = s.find("ss");
ASSERT_EQ(pos, 2);
pos = s.find('s');
ASSERT_EQ(pos, 2);
pos = s.find("ss", 3);
ASSERT_EQ(pos, 5);
}
Substrings¶
#include <gtest/gtest.h>
#include <string>
TEST(string_suite, substr)
{
std::string s = "Mississippi";
std::string is = s.substr(1, /*substring length:*/2);
ASSERT_EQ(is, "is");
}