我有一个文本文件,内容是
Point1, [5, 6]
Line2, [1, 2, 3], [-5, 55, 33]
Point2, [5, 3, 1]
Line1, [1, 2], [5, 7]
我会做比较,比如第一个变量(Point1,Line2,Point2,Line1)
如果是point1,则存储到point 1数组中,将5设为x,将y设为6。
如何将分隔符设置为逗号以及“[”和“]”。我只需要变量 Point1、5 和 6 来相应地存储它们。
我有一个文本文件,内容是
Point1, [5, 6]
Line2, [1, 2, 3], [-5, 55, 33]
Point2, [5, 3, 1]
Line1, [1, 2], [5, 7]
我会做比较,比如第一个变量(Point1,Line2,Point2,Line1)
如果是point1,则存储到point 1数组中,将5设为x,将y设为6。
如何将分隔符设置为逗号以及“[”和“]”。我只需要变量 Point1、5 和 6 来相应地存储它们。
我会用最简单的方法解决这个问题——使用 getline 读取文件,然后用空格替换所有出现的,
,[
和]
。std::istringstream
然后您可以使用from读取所有输入<sstream>
。您也可以使用正则表达式(如果您使用 boost 或 c++-11),但我相信我的建议应该可以完成这项工作。
编辑:这是一个如何做我建议的例子。我只会向您展示如何输入点,以及如何处理线,您必须添加基于名称的 if 语句。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main() {
string line;
while (getline(cin, line)) {
for (unsigned i = 0; i < line.size(); ++i) {
if (line[i] == '[' || line[i] == ']' || line[i] == ',') {
line[i] = ' ';
}
}
istringstream in(line);
string name;
double x,y;
in >> name >> x >> y; // Point1 <x> <y>
... do something with the point...
}
return 0;
}
您也可以使用replace_if
from<algorithm>
替换符号,但我认为您更容易理解此解决方案。
您可以使用 json-cpp 库。它有类似的语法:
{
"Point1" : [5, 6],
"Line2": {
"param1" : [1, 2, 3],
"param2" : [-5, 55, 33]
},
"Point2" : [5, 3, 1],
"Line1" : {
"param1" : [1, 2],
"param2" : [5, 7]
}
}