# strstream

***

**1. Redirecting Standard Output**

```cpp
#include <iostream>
#include <sstream>

int main() {
    std::stringstream buffer;
    std::streambuf* old_buffer = std::cout.rdbuf(buffer.rdbuf());
    std::cout << "Hello, world!" << std::endl;
    std::string output = buffer.str();
    std::cout.rdbuf(old_buffer);
    std::cout << output;
    return 0;
}
```

**2. String Formatting**

```cpp
#include <sstream>
#include <iomanip>

int main() {
    std::stringstream ss;
    ss << std::setw(10) << std::left << "Hello" << std::setw(10) << std::left << "World";
    std::string formatted_string = ss.str();
}
```

**3. Tokenization**

```cpp
#include <sstream>
#include <vector>

int main() {
    std::stringstream ss("Hello World");
    std::vector<std::string> tokens;
    std::string token;
    while (std::getline(ss, token, ' ')) {
        tokens.push_back(token);
    }
}
```

**4. Input Buffering**

```cpp
#include <sstream>
#include <iostream>

int main() {
    std::stringstream buffer;
    buffer << "Hello World" << std::endl;
    std::string line;
    while (std::getline(buffer, line)) {
        std::cout << line << std::endl;
    }
}
```

**5. CSV Parsing**

```cpp
#include <sstream>
#include <iostream>

int main() {
    std::stringstream ss("John,Doe,123");
    std::string name, surname;
    int age;
    std::getline(ss, name, ',');
    std::getline(ss, surname, ',');
    ss >> age;
    std::cout << name << " " << surname << ", " << age << std::endl;
}
```

**6. XML Parsing**

```cpp
#include <sstream>
#include <iostream>

int main() {
    std::stringstream ss("<xml><name>John</name><age>123</age></xml>");
    std::string tag, name, age;
    while (ss >> tag) {
        if (tag == "<name>") {
            ss >> name;
        } else if (tag == "<age>") {
            ss >> age;
        }
    }
    std::cout << "Name: " << name << ", Age: " << age << std::endl;
}
```

**7. HTML Parsing**

```cpp
#include <sstream>
#include <iostream>

int main() {
    std::stringstream ss("<html><body><h1>Hello World</h1></body></html>");
    std::string tag, text;
    while (ss >> tag) {
        if (tag == "<h1>") {
            std::getline(ss, text, '</h1>');
        }
    }
    std::cout << "Header: " << text << std::endl;
}
```

**8. Converting Numbers to Strings**

```cpp
#include <sstream>
#include <iostream>

int main() {
    int number = 123;
    std::stringstream ss;
    ss << number;
    std::string number_string = ss.str();
}
```

**9. Converting Strings to Numbers**

```cpp
#include <sstream>
#include <iostream>

int main() {
    std::string number_string = "123";
    std::stringstream ss(number_string);
    int number;
    ss >> number;
}
```

**10. Manipulating Strings**

```cpp
#include <sstream>
#include <iostream>

int main() {
    std::string input_string = "Hello world!";
    std::stringstream ss(input_string);
    ss << "This is a modified string";
    std::string modified_string = ss.str();
}
```

**11. Joining Strings**

```cpp
#include <sstream>
#include <iostream>

int main() {
    std::vector<std::string> strings = {"Hello", "world", "!"};
    std::stringstream ss;
    for (const auto& str : strings) {
        ss << str;
    }
    std::string joined_string = ss.str();
}
```

**12. Splitting Strings**

```cpp
#include <sstream>
#include <vector>

int main() {
    std::string input_string = "Hello.world.!";
    std::vector<std::string> parts;
    std::stringstream ss(input_string);
    std::string part;
    while (std::getline(ss, part, '.')) {
        parts.push_back(part);
    }
}
```

**13. Inserting and Removing Characters**

```cpp
#include <sstream>
#include <iostream>

int main() {
    std::string input_string = "Hello";
    std::stringstream ss(input_string);
    ss << ", world!";
    std::string modified_string = ss.str();
}
```

**14. Logging Messages**

```cpp
#include <sstream>
#include <iostream>

int main() {
    std::stringstream ss;
    ss << "Error: File not found";
    std::cerr << ss.str() << std::endl;
}
```

**15. Serializing Objects**

```cpp
#include <sstream>
#include <iostream>

class Person {
public:
    Person(const std::string& name, int age)
        : name(name), age(age) {}
    std::string Serialize() {
        std::stringstream ss;
        ss << name << "," << age;
        return ss.str();
    }

    static Person Deserialize(const std::string& serialized_string) {
        std::stringstream ss(serialized_string);
        std::string name, age_string;
        std::getline(ss, name, ',');
        std::getline(ss, age_string);
        int age = std::stoi(age_string);
        return Person(name, age);
    }
private:
    std::string name;
    int age;
};
```

**16. Generating Random Strings**

```cpp
#include <sstream>
#include <iostream>
#include <random>

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<int> dist(0, 9);
    std::stringstream ss;
    for (int i = 0; i < 10; i++) {
        ss << dist(gen);
    }
    std::string random_string = ss.str();
}
```

**17. Hashing Strings**

```cpp
#include <sstream>
#include <iostream>
#include <boost/crc.hpp>

int main() {
    std::string input_string = "Hello world!";
    std::stringstream ss;
    ss << input_string;
    boost::crc_32_type crc;
    crc.process_bytes(ss.str().c_str(), ss.str().length());
    std::cout << crc.checksum() << std::endl;
}
```

**18. Encrypting Strings**

```cpp
#include <sstream>
#include <iostream>
#include <openssl/sha.h>

int main() {
    std::string input_string = "Hello world!";
    std::stringstream ss;
    std::string hash;
    hash.resize(SHA256_DIGEST_LENGTH);
    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, input_string.c_str(), input_string.length());
    SHA256_Final((unsigned char*)hash.data(), &sha256);
    std::cout << hash << std::endl;
}
```

**19. Decoding Strings**

```cpp
#include <sstream>
#include <iostream>
#include <base64.h>

int main() {
    std::string encoded_string = "SGVsbG8gd29ybGQh";
    std::stringstream ss;
    ss << encoded_string;
    std::string decoded_string;
    base64_decode(ss.str(), decoded_string);
    std::cout << decoded_string << std::endl;
}
```

**20. Obfuscating Strings**

```cpp
#include <sstream>
#include <iostream>
#include <functional>

int main() {
    std::string input_string = "Hello world!";
    std::stringstream ss;
    std::for_each(input_string.begin(), input_string.end(), [](char& c) {
        c = c ^ 0x01;
    });
    ss << input_string;
    std::string obfuscated_string = ss.str();
}
```

**21. Compressing Strings**

```cpp
#include <sstream>
#include <iostream>
#include <zlib.h>

int main() {
    std::string input_string = "Hello world!";
    std::stringstream ss;
    z_stream zs;
    zs.zalloc = Z_NULL;
    zs.zfree = Z_NULL;
    zs.opaque = Z_NULL;
    if (deflateInit(&zs, Z_BEST_COMPRESSION) != Z_OK) {
        std::cerr << "deflateInit failed" << std::endl;
        return 1;
    }
    zs.avail_in = input_string.length();
    zs.next_in = (Bytef*)input_string.data();
    std::string compressed_string;
    while (zs.avail_in > 0) {
        zs.avail_out = 1024;
        zs.next_out = (Bytef*)compressed_string.data() + compressed_string.length();
        int status = deflate(&zs, zs.avail_out != 0 ? Z_NO_FLUSH : Z_FINISH);
        if (status != Z_OK && status != Z_STREAM_END) {
            std::cerr << "deflate failed" << std::endl;
            deflateEnd(&zs);
            return 1;
        }
        compressed_string.resize(compressed_string.length() + zs.avail_out);
    }
    deflateEnd(&zs);
    ss << compressed_string;
}
```

**22. Timestamping Strings**

```cpp
#include <sstream>
#include <iostream>
#include <chrono>

int main() {
    std::stringstream ss;
    ss << std::chrono::system_clock::now().time_since_epoch().count();
    std::string timestamped_string = ss.str();
}
```

**23. Generating Unique IDs**

```cpp
#include <sstream>
#include <iostream>
#include <uuid/uuid.h>

int main() {
    uuid_t uuid;
    uuid_generate(uuid);
    std::stringstream ss;
    ss << uuid;
    std::string uuid_string = ss.str();
}
```

**24. Converting Strings to Integers**

```cpp
#include <sstream>
#include <iostream>

int main() {
    std::string number_string = "123";
    std::stringstream ss(number_string);
    int number;
    ss >> number;
}
```

**25. Converting Integers to Strings**

```cpp
#include <sstream>
#include <iostream>

int main() {
    int number = 123;
    std::stringstream ss;
    ss << number;
    std::string number_string = ss.str();
}
```

**26. Converting Floating-Point Numbers to Strings**

```cpp
#include <sstream>
#include <iostream>

int main() {
    double number = 123.45;
    std::stringstream ss;


```
