#include <iostream>
#include <string>
#include <algorithm>   // for std::transform

int main() {
    // ==================== 1. String Construction ====================
    std::string s1;                     // Empty string
    std::string s2("Hello, C++");       // Construct from C-style string
    std::string s3(s2);                 // Copy constructor
    std::string s4(5, 'A');             // 5 'A' characters
    std::string s5(s2, 7, 3);           // Take 3 characters starting from index 7 of s2 -> "C++"

    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;

    // ==================== 2. Assignment Operations ====================
    std::string str;
    str = "Hello";              // const char* assignment
    str.assign(" World");       // assign method
    str = s2;                   // Assign from another string object
    str.assign(3, 'B');         // Assign 3 'B' characters

    std::cout << "=== Assignment Examples ===" << std::endl;
    std::cout << "After multiple assignments str = \"" << str << "\"" << std::endl;
    std::cout << std::endl;

    // ==================== 3. Character Access ====================
    std::string msg = "abcdef";
    std::cout << "=== Character Access ===" << std::endl;
    std::cout << "msg = \"" << msg << "\"" << std::endl;
    std::cout << "msg[0] = " << msg[0] << std::endl;          // Subscript operator
    std::cout << "msg.at(3) = " << msg.at(3) << std::endl;    // at() performs bounds checking
    std::cout << "msg.front() = " << msg.front() << std::endl; // First character
    std::cout << "msg.back() = " << msg.back() << std::endl;   // Last character
    std::cout << std::endl;

    // ==================== 4. Concatenation ====================
    std::string a = "Hello";
    std::string b = " World";
    std::string c = a + b;               // operator+
    a += b;                               // operator+=
    a.append("!");                        // append method
    a.push_back('!');                     // Append single character

    std::cout << "=== Concatenation Examples ===" << std::endl;
    std::cout << "a = \"" << a << "\"" << std::endl;
    std::cout << "c = a + b = \"" << c << "\"" << std::endl;
    std::cout << std::endl;

    // ==================== 5. Searching ====================
    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;

    // rfind: search from right to left
    pos = text.rfind("the");
    std::cout << "Position of \"the\" from the right: " << pos << std::endl;

    // find_first_of: find any matching character
    pos = text.find_first_of("aeiou");
    std::cout << "First vowel position: " << pos << " character: " << text[pos] << std::endl;
    std::cout << std::endl;

    // ==================== 6. Replacement ====================
    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++");   // Replace 1 character at position 7 with "C++"
    std::cout << "After replacement: \"" << replace_str << "\"" << std::endl;

    // Replace using iterator range
    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;

    // ==================== 7. Insertion ====================
    std::string ins = "HelloWorld";
    std::cout << "=== Insertion Examples ===" << std::endl;
    std::cout << "Original string: \"" << ins << "\"" << std::endl;
    ins.insert(5, " ");                // Insert space before index 5
    ins.insert(11, "!");               // Insert exclamation at end
    std::cout << "After insertion: \"" << ins << "\"" << std::endl;
    ins.insert(ins.begin() + 6, ',');  // Insert using iterator
    std::cout << "After inserting comma: \"" << ins << "\"" << std::endl;
    std::cout << std::endl;

    // ==================== 8. Erasure ====================
    std::string del = "ABCDEFGHIJK";
    std::cout << "=== Erasure Examples ===" << std::endl;
    std::cout << "Original string: \"" << del << "\"" << std::endl;
    del.erase(5, 3);     // Erase 3 characters starting at index 5 -> "ABCDEIJK"
    std::cout << "erase(5,3): \"" << del << "\"" << std::endl;
    del.erase(5);        // Erase from index 5 to end -> "ABCDE"
    std::cout << "erase(5): \"" << del << "\"" << std::endl;
    del.pop_back();      // Remove last character -> "ABCD"
    std::cout << "pop_back(): \"" << del << "\"" << std::endl;
    std::cout << std::endl;

    // ==================== 9. Substrings ====================
    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);   // 3 characters starting at 7 -> "C++"
    std::string sub2 = longStr.substr(12);     // From index 12 to end -> "Programmer!"
    std::cout << "substr(7,3): \"" << sub1 << "\"" << std::endl;
    std::cout << "substr(12): \"" << sub2 << "\"" << std::endl;
    std::cout << std::endl;

    // ==================== 10. Comparison ====================
    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); // Compare "ppl" and "ana"
    std::cout << "compare substring result: " << res << " (negative means less than)" << std::endl;
    std::cout << std::endl;

    // ==================== 11. Size and Capacity ====================
    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;

    // ==================== 12. Iteration ====================
    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;

    // ==================== 13. C-style String Conversion ====================
    std::string cppStr = "C++ string";
    const char* cstr = cppStr.c_str();   // Returns const char*
    char* data = cppStr.data();          // C++11/17 returns writable pointer (non-const)
    std::cout << "=== C-style Strings ===" << std::endl;
    std::cout << "c_str(): \"" << cstr << "\"" << std::endl;
    std::cout << "data(): \"" << data << "\"" << std::endl;

    // Modify data content (ensure string is not shared and has sufficient length)
    cppStr.copy(data, 3, 0);             // Copy first 3 characters "C++" to data (actually itself)
    std::cout << "data after copy: \"" << data << "\"" << std::endl;
    std::cout << std::endl;

    // ==================== 14. Input and getline ====================
    std::string input;
    std::cout << "=== Input Demonstration ===" << std::endl;
    std::cout << "Please enter a line of text (including spaces): ";
    std::getline(std::cin, input);       // Read entire line
    std::cout << "You entered: \"" << input << "\"" << std::endl;

    // Additional demo: string case conversion
    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;
}

results matching ""

    No results matching ""