我想找到一种有效的方法来分割这种字符串并将参数存储在变量中:
param1 (param2 param3) (param4 param5) ... param6
示例:
1. (10 10) (10 15) (2 11) 2.
1. (12 20) 2.
(有一个未定义的括号,其中每个2个数字用空格分隔)
我必须将第一个和最后一个参数存储在double中,并将数字存储在矢量中的括号中。
对于第二个例子,它会给出:
double beginOfLine, endOfLine
vector<int> vec1;
vector<int> vec2;
beginOfLine = 1.;
endOfLine = 2.;
vec1.push_back(12);
vec2.push_back(20);
我觉得在python中很容易。但是在C ++中,我无法以简单的方式完成它。
nb:我不允许使用boost / C ++ 11及更高版本
答案 0 :(得分:1)
由于您无法使用C ++ 11,因此使用std::stringstream
进行一些基本字符串拆分可能会起作用。我不确定只要<limits>
是C ++ 11的一部分,但您可以轻松地用另一个最大值替换它们。
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <limits>
int main()
{
double beginOfLine = 0.0, endOfLine = 0.0;
std::vector<int> vec1;
std::vector<int> vec2;
std::stringstream ss("1. (10 10) (10 15) (2 11) 2.");
ss >> beginOfLine;
while (true) {
int first, second;
ss.ignore(std::numeric_limits<std::streamsize>::max(), '(');
ss >> first >> second;
vec1.push_back(first);
vec2.push_back(second);
ss.ignore(std::numeric_limits<std::streamsize>::max(), ')');
ss.ignore(std::numeric_limits<std::streamsize>::max(), ' ');
if (ss.peek() != '(') {
ss >> endOfLine;
break;
}
}
std::cout << beginOfLine << '\n';
for (std::vector<int>::iterator it = vec1.begin(); it != vec1.end(); ++it)
std::cout << *it << ' ';
std::cout << '\n';
for (std::vector<int>::iterator it = vec2.begin(); it != vec2.end(); ++it)
std::cout << *it << ' ';
std::cout << '\n' << endOfLine;
return 0;
}