我已经尝试在此处/Google 上进行搜索,以找到一种更优化的方式来处理我需要处理的输入。这是一个例子...
[1 5 0 50 100 60] [2 4 1 0 40 50]
数字是随机的,但我事先知道括号内有多少组。此外,我确信格式将始终相同......
6个数字,用括号括起来
我已经有一些工作可以将输入输入一行,然后通过字符检查来迭代字符...
1) 计算括号集数量的外层 for 循环
2)先看是不是空格,'[', ']'
3) 如果不是,获取那个数字并存储它
4) 然后再次开始检查空间
5) 存储下一个等
6) 直到我到达']'并继续循环
但我觉得需要有一种更好/更简洁的方式来处理解析。
示例代码...
char c = line[position];
while (c == '[' || c == ']' || cc == ' '){
position++;
c = line[position];
}
string firstStr;
while (c != ' '){
firstStr += c;
position++;
c = line[position];
}
first = atoi(firstStr.c_str());
while (c == ' '){
position++;
ch = line[position];
}
string secondStr;
while (c != ' '){
secondStr += c;
position++;
c = line[position];
}
second = atoi(secondStr.c_str());
最佳答案
是的,我会说这太复杂了,原因很简单,因为 C++ 库已经包含这里需要的所有算法的优化实现。
std::string line;
这是您的输入。现在,让我们解析它。
#include <algorithm>
auto b=line.begin(), e=line.end();
while ((b=std::find(b, e, '[')) != e)
{
auto n_start=++b;
b=std::find(b, e, ']');
auto your_six_numbers_are_in_here=std::string(n_start, b);
// Now, do whatever you want with your numbers.
}
由于您“确定”您的输入是有效的,输入验证的大部分方面都不再是问题,以上内容应该足够了。
your_six_numbers_are_in_here
字符串可能包含也可能不包含前导或尾随空格。如何摆脱它们,以及如何提取实际数字是一个单独的任务。现在,既然您“确定”知道您的输入是有效的,那么这就变成了一个简单的问题:
std::istringstream i(your_six_numbers_are_in_here);
int a, b, c, d, e, f;
i >> a >> b >> c >> d >> e >> f;
不用说,如果您“不确定”您的输入是否有效,则需要在此处进行额外的工作。
关于c++ - 为括号中的数字解析字符串的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35671855/