#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string s1;
std::string s2("Hello, C++");
std::string s3(s2);
std::string s4(5, 'A');
std::string s5(s2, 7, 3);
std::cout << "=== Construction Examples ===" << std::endl;
std::cout << "s1: \"" << s1 << "\"" << std::endl;
std::cout << "s2: \"" << s2 << "\"" << std::endl;
std::cout << "s3 (copy of s2): \"" << s3 << "\"" << std::endl;
std::cout << "s4 (5 A's): \"" << s4 << "\"" << std::endl;
std::cout << "s5 (s2[7:10]): \"" << s5 << "\"" << std::endl;
std::cout << std::endl;
std::string str;
str = "Hello";
str.assign(" World");
str = s2;
str.assign(3, 'B');
std::cout << "=== Assignment Examples ===" << std::endl;
std::cout << "After multiple assignments str = \"" << str << "\"" << std::endl;
std::cout << std::endl;
std::string msg = "abcdef";
std::cout << "=== Character Access ===" << std::endl;
std::cout << "msg = \"" << msg << "\"" << std::endl;
std::cout << "msg[0] = " << msg[0] << std::endl;
std::cout << "msg.at(3) = " << msg.at(3) << std::endl;
std::cout << "msg.front() = " << msg.front() << std::endl;
std::cout << "msg.back() = " << msg.back() << std::endl;
std::cout << std::endl;
std::string a = "Hello";
std::string b = " World";
std::string c = a + b;
a += b;
a.append("!");
a.push_back('!');
std::cout << "=== Concatenation Examples ===" << std::endl;
std::cout << "a = \"" << a << "\"" << std::endl;
std::cout << "c = a + b = \"" << c << "\"" << std::endl;
std::cout << std::endl;
std::string text = "The quick brown fox jumps over the lazy dog";
std::cout << "=== Searching Examples ===" << std::endl;
std::cout << "text: \"" << text << "\"" << std::endl;
size_t pos = text.find("fox");
if (pos != std::string::npos)
std::cout << "Found \"fox\" at position " << pos << std::endl;
pos = text.find("cat");
if (pos == std::string::npos)
std::cout << "\"cat\" not found" << std::endl;
pos = text.rfind("the");
std::cout << "Position of \"the\" from the right: " << pos << std::endl;
pos = text.find_first_of("aeiou");
std::cout << "First vowel position: " << pos << " character: " << text[pos] << std::endl;
std::cout << std::endl;
std::string replace_str = "I like C";
std::cout << "=== Replacement Examples ===" << std::endl;
std::cout << "Original string: \"" << replace_str << "\"" << std::endl;
replace_str.replace(7, 1, "C++");
std::cout << "After replacement: \"" << replace_str << "\"" << std::endl;
replace_str.replace(replace_str.begin(), replace_str.begin() + 6, "I love");
std::cout << "After second replacement: \"" << replace_str << "\"" << std::endl;
std::cout << std::endl;
std::string ins = "HelloWorld";
std::cout << "=== Insertion Examples ===" << std::endl;
std::cout << "Original string: \"" << ins << "\"" << std::endl;
ins.insert(5, " ");
ins.insert(11, "!");
std::cout << "After insertion: \"" << ins << "\"" << std::endl;
ins.insert(ins.begin() + 6, ',');
std::cout << "After inserting comma: \"" << ins << "\"" << std::endl;
std::cout << std::endl;
std::string del = "ABCDEFGHIJK";
std::cout << "=== Erasure Examples ===" << std::endl;
std::cout << "Original string: \"" << del << "\"" << std::endl;
del.erase(5, 3);
std::cout << "erase(5,3): \"" << del << "\"" << std::endl;
del.erase(5);
std::cout << "erase(5): \"" << del << "\"" << std::endl;
del.pop_back();
std::cout << "pop_back(): \"" << del << "\"" << std::endl;
std::cout << std::endl;
std::string longStr = "Hello, C++ Programmer!";
std::cout << "=== Substring Examples ===" << std::endl;
std::cout << "Original string: \"" << longStr << "\"" << std::endl;
std::string sub1 = longStr.substr(7, 3);
std::string sub2 = longStr.substr(12);
std::cout << "substr(7,3): \"" << sub1 << "\"" << std::endl;
std::cout << "substr(12): \"" << sub2 << "\"" << std::endl;
std::cout << std::endl;
std::cout << "=== Comparison Examples ===" << std::endl;
std::string cmp1 = "apple", cmp2 = "banana";
std::cout << cmp1 << " vs " << cmp2 << " : ";
if (cmp1 == cmp2) std::cout << "equal";
else if (cmp1 < cmp2) std::cout << cmp1 << " is less than " << cmp2;
else std::cout << cmp1 << " is greater than " << cmp2;
std::cout << std::endl;
int res = cmp1.compare(1, 3, cmp2, 1, 3);
std::cout << "compare substring result: " << res << " (negative means less than)" << std::endl;
std::cout << std::endl;
std::string sizeStr = "Test";
std::cout << "=== Size and Capacity ===" << std::endl;
std::cout << "String: \"" << sizeStr << "\"" << std::endl;
std::cout << "size() / length(): " << sizeStr.size() << " / " << sizeStr.length() << std::endl;
std::cout << "capacity(): " << sizeStr.capacity() << std::endl;
std::cout << "empty(): " << std::boolalpha << sizeStr.empty() << std::endl;
sizeStr.clear();
std::cout << "empty() after clear(): " << sizeStr.empty() << std::endl;
std::cout << std::endl;
std::string iterStr = "Traverse";
std::cout << "=== Iteration Examples ===" << std::endl;
std::cout << "Index iteration: ";
for (size_t i = 0; i < iterStr.size(); ++i)
std::cout << iterStr[i] << " ";
std::cout << std::endl;
std::cout << "Iterator iteration: ";
for (auto it = iterStr.begin(); it != iterStr.end(); ++it)
std::cout << *it << " ";
std::cout << std::endl;
std::cout << "Range-based for iteration: ";
for (char ch : iterStr)
std::cout << ch << " ";
std::cout << std::endl;
std::cout << std::endl;
std::string cppStr = "C++ string";
const char* cstr = cppStr.c_str();
char* data = cppStr.data();
std::cout << "=== C-style Strings ===" << std::endl;
std::cout << "c_str(): \"" << cstr << "\"" << std::endl;
std::cout << "data(): \"" << data << "\"" << std::endl;
cppStr.copy(data, 3, 0);
std::cout << "data after copy: \"" << data << "\"" << std::endl;
std::cout << std::endl;
std::string input;
std::cout << "=== Input Demonstration ===" << std::endl;
std::cout << "Please enter a line of text (including spaces): ";
std::getline(std::cin, input);
std::cout << "You entered: \"" << input << "\"" << std::endl;
std::transform(input.begin(), input.end(), input.begin(), ::toupper);
std::cout << "Converted to uppercase: \"" << input << "\"" << std::endl;
std::transform(input.begin(), input.end(), input.begin(), ::tolower);
std::cout << "Converted to lowercase: \"" << input << "\"" << std::endl;
return 0;
}