我已经尝试在这里搜索/ Google以找到处理我需要处理的输入的更优化方式。这是一个例子......
[1 5 0 50 100 60] [2 4 1 0 40 50]
这些数字是随机的但我知道预先有多少括号内的套装。另外,我肯定知道格式总是一样的......
括号括起来的6个数字
我已经有了一些工作,我将输入放到一行,然后我逐个字符地检查...
1)外部循环,用于计算括号内的数量
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());
答案 0 :(得分:2)
是的,我会说这太复杂了,原因很简单,因为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;
毋庸置疑,如果您不确定“输入有效”,则需要进行额外的工作。