Beginner's Guide
    First Steps
    Input & Output
    Basic Custom Types
    Diagnostics
    Standard Library
    Code Organization
    Powerful Custom Types
    Generic Programming
    Memory Management
    Software Design Basics

    Strings (Basics)Strings (Basics)Strings

    std::string std::string

    • dynamic array of char (almost like vector<char>)
    • concatenation with + or +=
    • single character access with [index]
    • modifiable ("mutable") unlike in e.g., Python or Java
    • deeply copyable, deeply comparable
    #include <string>
    std::string hw = "Hello";
    std::string s = hw;     // copy of hw
    hw += " World!";
    cout << hw << '\n';     // Hello World!
    cout << hw[4] << '\n';  // o
    cout << s << '\n';      // Hello

    char = std::string's Element Type char char

    • one char can hold a single character
    • smallest integer type (usually 1 byte)
    • char literals must be enclosed in single quotes: 'a', 'b', 'c', …
    char c1 = 'A';   
    char c2 = 65;  // 
    ASCII
     code of 'A'
    cout << c1 << '\n';          // A
    cout << c2 << '\n';          // A
    cout << (c1 == c2) << '\n';  // 1
    
    std::string s = "xyz"; s[1] = c1; cout << s << '\n'; // xAz s += c2; cout << s << '\n'; // xAzA
    Special Characters
    backslash \ acts as escape character
    \n new line "Line1\nLine1\nLine3"
    \t tab "Column1\tColumn1\tColumn3"
    \' single quote "he said \'quote\' to me"
    \" double quote "he said \"quote\" to me"
    \\ backslash itself "C:\\Users\\me\\hello.cpp"

    std::string Manipulation Manipulation

    Literals

    'a' char
    "C-string literal" char const[]
    "std string literal"s std::string
    "xyz"   is a "C-string"
    auto a = "seven of";  // type of a is char const[]
    auto b = a;           // b refers to same object as a// refers to same object
    
    a += " nine"; // COMPILER ERROR: can't be modified auto c = "al" + "cove"; // COMPILER ERROR
    std::string s = a; // a is copied into s s += " nine"; // (s is std::string)
    "xyz" s   is a std::string
    #include <string>
    using namespace std::string_literals;
    
    auto s1 = "seven of"s; // type of s1 is std::string auto s2 = s1; // s2 is a copy of s1
    s1 += " nine"; // cout << s1 << '\n'; // seven of nine cout << s2 << '\n'; // seven of
    auto s3 = "uni"s + "matrix"s; // cout << s3 << '\n'; // unimatrix
    String literals that are only separated by whitespace are joined:
    "first" "second""first second"
    std::string b = "This is one literal"
                    "split into several"
                    "source code lines!";
    Raw String Literals

    Advantage: special characters can be used without escaping

    R"(raw "C"-string c:\users\joe )" char const[]}
    R"(raw "std"-string c:\users\moe )"s std::string

    std::getline getline

    • read entire lines / chunks of text at once
    • target string can be re-used (saving memory)
    std::string s;
    getline(std::cin, s);        // read entire line
    getline(std::cin, s, '\t');  // read until next tab
    getline(std::cin, s, 'a');   // read until next 'a'