在C ++中将用空格分隔的字符串读入向量[关闭]
Posted
技术标签:
【中文标题】在C ++中将用空格分隔的字符串读入向量[关闭]【英文标题】:Reading string separated by spaces into vector in C++ [closed] 【发布时间】:2014-11-17 21:58:47 【问题描述】:这是我的 test.txt 的样子:
18 19 20
21 22 23
22 23 24
23 24 25
24 25 26
25 26 27
28 29 30
29 30 31
我想将 test.txt 中的整数作为字符串读取,然后创建一个包含 3 个整数的向量。 如果这是有道理的,那么输出是一个看起来像这样的向量:
18 19 20, 21 22 23, 22 23 24, 23 24 25, 24 25 26, 25 26 27, 28 29 30, 29 30 31
这是我的代码:
#include "test.txt"
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
#include <vector>
using namespace std;
struct M
int x;
int y;
int z;
;
int main()
ifstream file;
file.open("test.txt");
string value;
M XYZ;
vector<M> Vec;
if (file)
while (getline(file, value))
XYZ.x = stoi(value);
if (value == " ")
XYZ.y = stoi(value);
if (value == " ")
XYZ.z = stoi(value);
Vec.push_back(XYZ);
else
cout << "Error openning file." << endl;
for (int i = 0; i < Vec.size(); i++)
cout << Vec[i] << endl;
return 0;
我认为我正确使用了 getline 和 stoi,但可能是错误的。 在大多数情况下,逻辑似乎是正确的。 提前致谢。
【问题讨论】:
...那么问题出在哪里?你有什么问题? 您好,欢迎来到 ***!请告诉我们您的代码有什么问题。如果这是一个代码改进问题,那么最好在CodeReview StackExchange 提问 我会用std::stringstream ss;
替换 while
循环中的内容,请参阅 dreamincode.net/forums/topic/95826-stringstream-tutorial ,然后使用 ss
填充结构,例如 ss >> XYZ.x >> XYZ.y >> XYZ.z;
这样,您不必关心空格等。
我认为问题在于代码不起作用。首先,为什么要包含“text.txt”??其次,您将输入读入 Vec Vector 但您正在打印 Moves 矢量?这段代码完整吗?
你在同一个字符串上调用了 stoi(value)
三次。调用stoi
不会修改输入字符串。
【参考方案1】:
使用std::stringstream
应该可以减少出错的可能性
while (getline(file, value))
std::stringstream ss(value); // must #include <sstream>
ss >> XYZ.x >> XYZ.y >> XYZ.z;
由于@Jonathan Potter 的评论,您的代码现在无法运行。
【讨论】:
谢谢。但是,当我尝试打印内容时,出现错误:无法将 'std::ostream aka std::basic_ostreamMoves[i]
是struct
。尝试分别显示每个元素,例如 cout << Moves[i].x << Moves[i].y << Moves[i].z
,或为您的结构重载 ostream& operator<<
。以上是关于在C ++中将用空格分隔的字符串读入向量[关闭]的主要内容,如果未能解决你的问题,请参考以下文章