C++ 如何使用C++;

C++ 如何使用C++;,c++,C++,我有一个格式为1,3-7,10,11-15的字符串输入 我想识别输入范围内的所有整数。如何使用C++实现? 短暂性脑缺血发作 Guppy这个问题属于解析领域。你应该使用解析器。解析器解释一种语言。在您的情况下,语言将如下所示: input = comma-separated sequence of fragments fragment = integer or range range = integer-integer integer = sequence of digits 0..9 //免

我有一个格式为1,3-7,10,11-15的字符串输入 我想识别输入范围内的所有整数。如何使用C++实现? 短暂性脑缺血发作
Guppy

这个问题属于解析领域。你应该使用解析器。解析器解释一种语言。在您的情况下,语言将如下所示:

input = comma-separated sequence of fragments
fragment = integer or range
range = integer-integer
integer = sequence of digits 0..9
//免责声明--未经测试
//免责声明——这不是一个好代码,但它是一种快速而肮脏的方法
//如果你想找到一个可能的解决方案。
#包括
#包括
#包括
常量字符输入[]=“1,3-7,10,11-15”;
常量字符*inputBegin=输入;
常量字符*输入=输入+字符串(输入);
std::向量结果;
for(;inputBegin
到目前为止,您尝试了什么?这样做的哪一部分让你困惑?这是家庭作业吗?如果你提供更多的信息,你会得到更多/更好的答案。+1对于那些公开承认虽然它有效,但不是最佳解决方案的人来说。希望更多的人在他们的博客上这样做。这个代码很可怕。真的很恶心。但我不会因为惠蒂斯提到的同样原因而投你的反对票。这看起来比因为没有空格和平静的绿色评论更可怕。
//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);
}