在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 &gt;&gt; XYZ.x &gt;&gt; XYZ.y &gt;&gt; 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_ostream' lvalue 绑定到 'std::basic_ostream&&' cout 那是因为Moves[i]struct。尝试分别显示每个元素,例如 cout &lt;&lt; Moves[i].x &lt;&lt; Moves[i].y &lt;&lt; Moves[i].z,或为您的结构重载 ostream&amp; operator&lt;&lt;

以上是关于在C ++中将用空格分隔的字符串读入向量[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在c#/LINQ中将数组转换为字符串的最短方法[重复]

如何在bash中将空格替换为新行[重复]

在python中将空格分隔文件转换为逗号分隔值文件

怎么用excel把一列变成两列

用 SSE 在 C++ 中将两个 32 位整数向量相乘的最快方法

关于在Hive中将特定字符分隔的字符串拆分成多行的应用