我有一个文本文件写为:
1 2 3 7 8 9 13 14 15
目标是使每列成为整数数组,例如x=[1,7,13]
,y=[2,8,14]
,z=[3,9,15]
。
这是我到目前为止所拥有的......
我打开文本文件并以字符串形式读入内容:
string fileText;
int n;
int result[];
//file open
ifstream input ("input.txt");
//file read
if(input.is_open())
{
for(int i=0; i<n; i++) //n=3 in this case
{
getline(input, fileText);
result = strtok(fileText," "); // parse each line by blank space " ".
//i get various errors here depending on what I try: such as "must be lvalue"
//or a problem converting string to char.
x[i] = result[0];
y[i] = result[1];
z[i] = result[2];
}
}
所以我的问题是将一行文本转换为由空格分隔的数字到整数数组。
这在PHP等高级语言中非常简单,但在C ++中,数据类型和内存分配更加复杂......等等。我是新手!
由于
〜
如果没有矢量,我该怎么做?
如果说我有: int x *,y *,z *;
然后为每个变量指针分配内存:
x = (int*) malloc (n*sizeof(int)); // where n is the number of lines in the text doc.
y = (int*) malloc (n*sizeof(int));
z = (int*) malloc (n*sizeof(int));
现在我想将每列放入每个x,y,z整数数组中。
我可以这样做:
...
std::string line;
int i;
for (int k=0; k<n; k++)
{
while (std::getline (input, line))
{
std::stringstream parse(line);
parse >> i;
x[k] = i;
parse >> i;
y[k] = i;
parse >> i;
z[k] = i;
}
}
现在x = [1,7,13]等等。
有没有办法在不使用push_back()方法的情况下执行此操作? 我只想读入每个数组的整数。
使用getNextInt()或其他什么?
答案 0 :(得分:4)
如果您的文件很简单,您只需执行以下操作:
std::vector<std::vector<int>> v;
ifstream input("input.txt");
for(int x, y, z; input >> x >> y >> z;)
v.push_back(std::vector<int>{x, y, z});
或std::tuple
:
std::vector<std::tuple<int, int, int>> v;
ifstream input("input.txt");
for(int x, y, z; input >> x >> y >> z;)
v.emplace_back(x, y, z);
这根本不需要转换,只要流失败就会失败。两者都需要,C ++ 11支持,所以如果您需要C ++ 03解决方案,请告诉我。
如果你想坚持使用普通的旧数组:
ifstream input("input.txt");
for(int i = 0; input >> x[i] >> y[i] >> z[i]; ++i)
;
答案 1 :(得分:4)
使用从getline返回的字符串创建一个字符串流可能是最“C ++”的方式来完成你想要做的事情。
std::vector<int> x, y, z;
ifstream input ("input.txt");
if(input.is_open())
{
std::string line;
int i;
while (std::getline (input, line))
{
std::stringstream parse(line);
// assuming 3 just like you had
parse >> i;
x.push_back (i);
parse >> i;
y.push_back (i);
parse >> i;
z.push_back (i);
}
}
没有必要进行条件检查,但我原来就把它留下了。