【发布时间】:2010-04-19 14:20:40
【问题描述】:
我有一个格式为 1,3-7,10,11-15 的字符串输入 我想识别范围内输入的所有整数。如何使用 C++ 实现这一点?
TIA 孔雀鱼
【问题讨论】:
-
到目前为止您尝试过什么?这样做的哪一部分让您感到困惑?这是作业吗?如果您提供更多信息,您将获得更多/更好的答案。
标签: c++
我有一个格式为 1,3-7,10,11-15 的字符串输入 我想识别范围内输入的所有整数。如何使用 C++ 实现这一点?
TIA 孔雀鱼
【问题讨论】:
标签: c++
这个问题属于解析领域。你会使用解析器。解析器解释一种语言。在您的情况下,语言将如下所示:
input = comma-separated sequence of fragments
fragment = integer or range
range = integer-integer
integer = sequence of digits 0..9
【讨论】:
//Disclaimer -- untested
//Disclaimer -- this is not good code, but it's a quick and dirty way to do this
// if you're trying to see a possible solution.
#include <algorithm>
#include <functional>
#include <vector>
const char input[] = "1,3-7,10,11-15";
const char * inputBegin = input;
const char * inputEnd = input + strlen(input);
std::vector<int> result;
for(; inputBegin < inputEnd; inputBegin = std::find_if(inputBegin, inputEnd, isdigit)) {
int first = *inputBegin - '0';
for(inputBegin++; inputBegin < inputEnd && isdigit(*inputBegin); inputBegin++)
first = first * 10 + (*inputBegin - '0');
int last = first;
if (++inputBegin < inputEnd && *inputBegin == '-') {
last = inputBegin - '0';
for(inputBegin++; inputBegin < inputEnd && isdigit(*inputBegin); inputBegin++)
last = last * 10 + (*inputBegin - '0');
}
for(; first < last; first++)
result.push_back(first);
}
【讨论】: