# string\_view

***

**1. String Comparison**

```cpp
std::string_view s1 = "Hello";
std::string_view s2 = "World";

if (s1 == s2) {
  std::cout << "Strings are equal" << std::endl;
}
```

**2. String Concatenation**

```cpp
std::string_view s1 = "Hello";
std::string_view s2 = ", ";
std::string_view s3 = "World";

auto greeting = s1 + s2 + s3;
std::cout << greeting << std::endl; // Output: Hello, World
```

**3. Substring Extraction**

```cpp
std::string_view s = "This is a string";

auto substring = s.substr(4, 5); // "is a"
std::cout << substring << std::endl;
```

**4. String Search**

```cpp
std::string_view s = "Programming is fun";

auto pos = s.find("fun"); // 14
std::cout << "The substring 'fun' was found at position " << pos << std::endl;
```

**5. Character Access**

```cpp
std::string_view s = "Hello";

char c = s[0]; // 'H'
std::cout << c << std::endl;
```

**6. String Conversion to std::string**

```cpp
std::string_view s = "Hello";

std::string str(s); // "Hello"
std::cout << str << std::endl;
```

**7. String Conversion to char**\*

```cpp
std::string_view s = "Hello";

char* cstr = s.data(); // Pointer to the beginning of the string
std::cout << cstr << std::endl; // Output: Hello
```

**8. String Length**

```cpp
std::string_view s = "Hello";

std::size_t len = s.size(); // 5
std::cout << len << std::endl;
```

**9. String Hashing**

```cpp
std::string_view s = "Hello";

std::hash<std::string_view> hash_fn;
std::size_t hash_value = hash_fn(s); // Hash value of the string
std::cout << hash_value << std::endl;
```

**10. String Format Argument**

```cpp
std::string_view format = "Hello, {}!";
std::string name = "John";

std::cout << std::format(format, name) << std::endl; // Output: Hello, John!
```

**11. Regex Matching**

```cpp
std::string_view input = "12345";
std::regex pattern("[0-9]+");

std::smatch match;
if (std::regex_match(input, match, pattern)) {
  std::cout << "Input matches the pattern" << std::endl;
}
```

**12. Text Parser**

```cpp
std::string_view text = "Name: John Doe, Age: 30";

auto name_pos = text.find("Name: ");
auto age_pos = text.find("Age: ");

if (name_pos != std::string_view::npos && age_pos != std::string_view::npos) {
  std::cout << "Name: " << text.substr(name_pos + 6, age_pos - name_pos - 6) << std::endl;
  std::cout << "Age: " << text.substr(age_pos + 5) << std::endl;
}
```

**13. File Reading**

```cpp
std::ifstream file("myfile.txt");
std::string_view line;

while (std::getline(file, line)) {
  std::cout << line << std::endl;
}
```

**14. JSON Parsing**

```cpp
std::string_view json = "{\"name\": \"John Doe\", \"age\": 30}";

auto name_pos = json.find("\"name\": ");
auto age_pos = json.find("\"age\": ");

if (name_pos != std::string_view::npos && age_pos != std::string_view::npos) {
  std::cout << "Name: " << json.substr(name_pos + 7, age_pos - name_pos - 7) << std::endl;
  std::cout << "Age: " << json.substr(age_pos + 6) << std::endl;
}
```

**15. HTML Parsing**

```cpp
std::string_view html = "<html><body><h1>Hello World</h1></body></html>";

auto title_pos = html.find("<h1>");
auto title_end_pos = html.find("</h1>");

if (title_pos != std::string_view::npos && title_end_pos != std::string_view::npos) {
  std::cout << "Title: " << html.substr(title_pos + 4, title_end_pos - title_pos - 4) << std::endl;
}
```

**16. XML Parsing**

```cpp
std::string_view xml = "<xml><name>John Doe</name><age>30</age></xml>";

auto name_pos = xml.find("<name>");
auto name_end_pos = xml.find("</name>");

auto age_pos = xml.find("<age>");
auto age_end_pos = xml.find("</age>");

if (name_pos != std::string_view::npos && name_end_pos != std::string_view::npos &&
    age_pos != std::string_view::npos && age_end_pos != std::string_view::npos) {
  std::cout << "Name: " << xml.substr(name_pos + 6, name_end_pos - name_pos - 6) << std::endl;
  std::cout << "Age: " << xml.substr(age_pos + 5, age_end_pos - age_pos - 5) << std::endl;
}
```

**17. CSV Parsing**

```cpp
std::string_view csv = "John Doe,30,Developer";

auto name_pos = csv.find(",");
auto age_pos = csv.find(",", name_pos + 1);

if (name_pos != std::string_view::npos && age_pos != std::string_view::npos) {
  std::cout << "Name: " << csv.substr(0, name_pos) << std::endl;
  std::cout << "Age: " << csv.substr(name_pos + 1, age_pos - name_pos - 1) << std::endl;
  std::cout << "Occupation: " << csv.substr(age_pos + 1) << std::endl;

```
