Hello everyone! Today I want to share with you a super useful skill in C++: string operations. Whether it’s processing CSV files or extracting web links, once you master the basic operations of strings, these tasks can be easily accomplished! It’s like magic; let’s play with strings together!
1. Basic String Operations
In C++, we mainly use std::string
to handle strings. It’s like a pocket full of characters, where we can add, delete, or modify content.
#include <string>
#include <iostream>
int main() {
std::string text = "Hello, C++!";
// Get string length
std::cout << "Length: " << text.length() << std::endl;
// Access a single character
std::cout << "First character: " << text[0] << std::endl;
// String concatenation
std::string name = "Xiao Ming";
std::string greeting = "Hello, " + name;
// Substring extraction
std::string sub = text.substr(0, 5); // Extract 5 characters starting from index 0
}
2. String Searching
Imagine a string as a book, and we want to find a specific “keyword” in it. C++ provides various searching methods:
std::string text = "C++ is amazing, C++ is powerful!";
// Find the position of the first occurrence
size_t pos = text.find("C++");
if (pos != std::string::npos) {
std::cout << "Found! Position: " << pos << std::endl;
}
// Start searching from a specified position
pos = text.find("C++", pos + 1); // Find the second "C++"
// Find the position of the last occurrence
pos = text.rfind("C++");
// Find any character
pos = text.find_first_of("aeiou"); // Find the first vowel
Tip: std::string::npos
is a special value indicating “not found,” like a predetermined code!
3. String Replacement and Modification
Sometimes we need to perform a “makeover” on strings, replacing or modifying their contents:
std::string text = "Hello, world!";
// Replace substring
text.replace(0, 5, "Hi"); // Replace the first 5 characters with "Hi"
// Insert string
text.insert(3, "lovely "); // Insert string at position 3
// Delete characters
text.erase(0, 3); // Delete the first 3 characters
// Clear string
text.clear();
// Resize string
text.resize(10, '*'); // Resize to 10 characters, filling with * if not enough
4. Practical Example: CSV File Parsing
Let’s write a simple CSV parser to split a string into data items:
#include <vector>
#include <sstream>
std::vector<std::string> splitCSV(const std::string& line) {
std::vector<std::string> result;
std::stringstream ss(line);
std::string item;
// Use getline to split by comma
while (std::getline(ss, item, ',')) {
// Trim whitespace
size_t first = item.find_first_not_of(" \t");
size_t last = item.find_last_not_of(" \t");
if (first != std::string::npos && last != std::string::npos) {
item = item.substr(first, last - first + 1);
}
result.push_back(item);
}
return result;
}
5. Practical Example: Extracting Web Links
This example demonstrates how to extract links from HTML text:
std::vector<std::string> extractLinks(const std::string& html) {
std::vector<std::string> links;
std::string href = "href=\"";
size_t pos = 0;
while ((pos = html.find(href, pos)) != std::string::npos) {
// Find the position of href="
size_t start = pos + href.length();
// Find the next quote position
size_t end = html.find("\"", start);
if (end != std::string::npos) {
// Extract link
std::string link = html.substr(start, end - start);
if (!link.empty()) {
links.push_back(link);
}
}
pos = end + 1;
}
return links;
}
Important Notes:
-
Be mindful of boundary conditions when performing string operations. -
When concatenating many strings, it’s best to use std::stringstream
. -
Special care is needed when handling multi-byte character sets like UTF-8. -
String searching is case-sensitive.
Practice Questions:
-
How to count the occurrences of a word in a string? -
Write a function to convert all lowercase letters in a string to uppercase. -
How to verify if a string is a palindrome?
Friends, today’s journey of learning C++ ends here! Remember to code actively, and feel free to ask me any questions in the comments. Wishing everyone a happy learning experience and continuous improvement in C++!