【问题标题】:Parsing Space Delimited Numbers from Getline从 Getline 解析空格分隔的数字
【发布时间】:2012-04-25 04:53:31
【问题描述】:

我正在编写一个小程序,它将读取一个包含 5 条记录中的 3 行的纯 ASCII 文本文件,如下所示:

f_name l_name
ID#
int int int int

我成功地将前 2 行放入它们所属的一维数组中,但我无法将整数系列放入二维数组中。我最接近解决方案的方法是使用以下行:

studentScores[row][col] = atoi(input.c_str());

但是,atoi 只解析第一个数字,然后丢弃该行的其余部分。我需要将字符串中的每个数字放在数组的单独元素中。我尝试使用 stringstream,但无法使其正常工作;显然,我想使用的函数包含在与我使用的不同版本的 stringstream 中。

我可以用什么来解析这个字符串?

【问题讨论】:

  • sscanf 会读取一个 C 字符串,并提取 4 个空格分隔的整数。
  • @gbulmer :大概这是为了家庭作业或学习练习——如果是这样,我认为向学习 C++ 的人推荐 C API 不是一个好主意。
  • 是的,这是一个编程作业,大约在 3 小时后到期。我整个星期都在努力。
  • @Opcode : 以后请将作业标记为homework。 :-]
  • @ildjarn - 使用 atoi 的 OP,并且 atoi 和 sscanf 在 C++ 中都可用,例如cplusplus.com/reference/clibrary/cstdio/sscanf 在卡住时避免使用它们,恕我直言,比“不是一个好主意”更糟糕 :-)

标签: c++ parsing getline


【解决方案1】:
#include <string>
#include <sstream>

// ...

int ints[4];
std::string input;
std::getline(stream, input);
std::istringstream(input) >> ints[0] >> ints[1] >> ints[2] >> ints[3];

(为简洁起见,省略了错误处理。)

【讨论】:

  • 此代码是否适用于文件中的其他数据类型?我在开始时做一个 getline,然后将每个字符串提供给适当的数组(string[]、int[]、scores[][])。
  • @Opcode :是的,它适用于任何原始类型以及 std::string (尽管在这种情况下它一次只会给你一个单词;如果你想要更多,请使用std::getline 使用适当的分隔符而不是 &gt;&gt;)。
  • FWIW,我刚刚完成了我的程序的编码并让它正常工作。我还有 1.75 小时必须交!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 2017-01-25
  • 1970-01-01
  • 2018-11-30
相关资源
最近更新 更多