c++提取一个区间的字符串
时间: 2024-10-04 13:01:45 浏览: 30
字符串基本操作的实现(报告+程序)
在C++中,如果你有一个包含区间信息的字符串,比如"1-5,8,10-15",你想将其解析成区间列表,你可以使用一些字符串处理和范围(Range)相关的库,如Boost.Range或你自己编写一些简单的逻辑来分割和转换。
以下是一个基本的例子,假设我们手动处理这个过程:
```cpp
#include <string>
#include <vector>
#include <sstream>
std::vector<std::pair<int, int>> extractIntervals(const std::string& str) {
std::istringstream iss(str);
std::vector<std::pair<int, int>> intervals;
std::string intervalStr;
while (iss >> intervalStr) {
size_t startEndPos = intervalStr.find('-');
if (startEndPos != std::string::npos) { // 如果有范围分隔符
int start = std::stoi(intervalStr.substr(0, startEndPos));
int end = startEndPos == intervalStr.length() - 1 ? start : std::stoi(intervalStr.substr(startEndPos + 1)); // 如果只有一个数字,它就是结束位置
intervals.push_back({start, end});
} else {
intervals.push_back({std::stoi(intervalStr), std::stoi(intervalStr)}); // 单一数字视为起始点和结束点相同的单个区间
}
}
return intervals;
}
// 使用示例
int main() {
std::string input = "1-5,8,10-15";
std::vector<std::pair<int, int>> result = extractIntervals(input);
for (const auto& interval : result) {
std::cout << "[" << interval.first << ", " << interval.second << "]" << std::endl;
}
return 0;
}
```
阅读全文