首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用C++将一系列整数转换为列表

如何使用C++将一系列整数转换为列表
EN

Stack Overflow用户
提问于 2010-04-19 22:20:40
回答 2查看 474关注 0票数 2

我有一个格式为1,3-7,10,11-15的字符串输入,我想标识范围内输入的所有整数。如何使用C++实现这一点?

TIA Guppy

EN

回答 2

Stack Overflow用户

发布于 2010-04-19 22:23:57

这个问题属于句法分析领域。你可以使用解析器。解析器解释一种语言。在您的示例中,语言将如下所示:

代码语言:javascript
运行
复制
input = comma-separated sequence of fragments
fragment = integer or range
range = integer-integer
integer = sequence of digits 0..9
票数 4
EN

Stack Overflow用户

发布于 2010-04-19 23:18:43

代码语言:javascript
运行
复制
//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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2668107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档