Beginner's Guide
    First Steps
    Input & Output
    Custom Types – Part 1
    Diagnostics
    Standard Library – Part 1
    Function Objects
    Standard Library – Part 2
    Code Organization
    Custom Types – Part 2
    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

    "C string Literal" "..."

    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)

    "std::string Literal"sC++14 "..."s

    #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

    Joining  "first" "second"  ⇒  "first second"

    Raw String Literals R"(...)" Raw

    Advantage: special characters can be used without escaping

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

    Syntax:R"DELIMITER(characters…)DELIMITER"

    where DELIMITER can be a sequence of 0 to 16 characters except spaces, (, ) and \

    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'