我正在尝试解析一个看起来像“1,4-6,8-10,12”的字符串,然后将结果 push_back 到 ints/char* 的向量中。在解析时,如果逻辑遇到 4-6,那么它应该将整数 4,5 和 6 推入向量中。我正在尝试使用 strtok 执行此操作,但它修改了输入字符串的唯一副本,因此我无处可去。我不能使用 boost,否则标记器会非常简单和有用。
问问题
573 次
2 回答
0
std::stringstream ss("1,4-6,8-10,12");
std::vector<int> v;
int x;
while(ss >> x)
{
v.push_back(x);
char c;
ss >> c; //will just discard a non space char.
if(c != ',' || c != '-') ss.unget(); //... unless is just , or -
}
写这篇文章的时间:1分钟。搜索合适算法函数的时间:至少 5 分钟。
自己决定什么更有效率。
于 2013-05-29T06:46:07.283 回答
0
#include <stlport\sstream>
#include <stlport\vector>
using namespace std;
...
stringstream ss("1,4-6,8-10,12");
vector<int> v;
int x, x2;
char c;
while (ss >> x)
{
v.push_back(x);
if (!(ss >> c))
break; // end of input string
if (c == '-')
{
if (!(ss >> x2))
throw; // incorrect input string
for (int i = x+1; i <= x2; i++)
v.push_back(i);
if (!(ss >> c))
break; // end of input string
}
else if (c != ',')
throw; // incorrect input string
}
// check
int s = v.size();
// s = 8, v:{1,4,5,6,8,9,10,12}
于 2013-05-29T08:40:27.130 回答