字符串的分割c++
时间: 2025-05-06 07:50:39 浏览: 22
### C++ 中字符串分割的方法
在 C++ 编程中,字符串分割是一个常见的需求。以下是几种常用的字符串分割方法及其示例:
#### 方法一:使用 `strtok` 函数
`strtok` 是一种传统的字符串分割方式,适用于简单的场景。它会修改原始字符串并返回被分割的部分。
```cpp
#include <cstring>
#include <cstdio>
int main() {
char chArry[] = "one two three,four * five";
const char *delimiters = " ,*";
char *token;
token = strtok(chArry, delimiters);
while (token != nullptr) {
printf("%s\n", token);
token = strtok(nullptr, delimiters);
}
return 0;
}
```
这种方法简单易用,但需要注意的是,`strtok` 修改了输入字符串的内容[^1]。
---
#### 方法二:利用 STL 的 `std::stringstream`
通过 `std::stringstream` 可以轻松实现基于空白字符或其他指定分隔符的字符串分割。此方法不会改变原字符串。
```cpp
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> tokens;
std::string inputStr;
std::cout << "请输入待分割的字符串:" << std::endl;
std::getline(std::cin, inputStr);
std::stringstream ss(inputStr);
std::string token;
while (ss >> token) { // 默认按空格分割
tokens.push_back(token);
}
for (const auto& t : tokens) {
std::cout << t << std::endl;
}
return 0;
}
```
该方法适合处理以单个或多个连续空白字符作为分隔符的情况[^2]。
---
#### 方法三:自定义函数结合 `std::istringstream`
如果需要更灵活地控制分隔符,则可以通过 `std::istringstream` 和 `std::getline` 实现定制化功能。
```cpp
#include <sstream>
#include <vector>
#include <string>
std::vector<std::string> splitWithIStringStream(const std::string& str, char delimiter) {
std::vector<std::string> result;
std::istringstream iss(str);
std::string token;
while (std::getline(iss, token, delimiter)) {
result.push_back(token);
}
return result;
}
int main() {
std::string inputStr = "apple-orange-banana-grape";
char delimiter = '-';
std::vector<std::string> tokens = splitWithIStringStream(inputStr, delimiter);
for (const auto& t : tokens) {
std::cout << t << std::endl;
}
return 0;
}
```
这种方式更加通用且安全,推荐用于现代 C++ 开发环境[^5]。
---
#### 方法四:手动遍历与 `substr`
对于某些特殊需求,可能需要逐字扫描字符串并通过索引来提取子串。
```cpp
#include <vector>
#include <string>
std::vector<std::string> splitWithStringSubstr(const std::string& str, char delimiter) {
std::vector<std::string> result;
size_t start = 0, end = 0;
while ((end = str.find(delimiter, start)) != std::string::npos) {
result.emplace_back(str.substr(start, end - start));
start = end + 1;
}
result.emplace_back(str.substr(start)); // 添加最后一部分
return result;
}
int main() {
std::string inputStr = "hello-world-example";
char delimiter = '-';
std::vector<std::string> tokens = splitWithStringSubstr(inputStr, delimiter);
for (const auto& t : tokens) {
std::cout << t << std::endl;
}
return 0;
}
```
这种技术虽然复杂度较高,但在性能敏感的应用中有一定优势[^3]。
---
#### 总结
以上介绍了四种主流的 C++ 字符串分割方法,每种都有其适用范围和局限性。开发者应根据实际需求选择合适的方案。
阅读全文
相关推荐



















