将输入读取到动态大小的数组中

3 投票
2 回答
1165 浏览
提问于 2025-04-16 17:14

我想做的事情是,从标准输入读取一行,并用空格来分隔这行内容。

假设我的输入是这样的:

2
1 2
3 4

第一行告诉我我想读取的行数,这些行都是由整数组成的,整数之间用不确定数量的空格分隔(也就是说,可能是一个空格,也可能是十个空格)。
我想做的事情是把这些行读入动态大小的整数数组中。

在Python中,这个操作非常简单:

foo = raw_input()
array = foo.split()

甚至可以更简短:

foo = raw_input().split()

但是,由于一些原因,我必须学习C++的魅力。于是我尝试创建一个类似于上面Python代码的东西:

#include <iostream>

using namespace std;

int lines;
int *array;

int main() {
    cin >> lines;
    for (int line = 0; line < lines; line++) {
        // Something.
    }
}

不过,我似乎不知道怎么分割输入的这一行。我知道std::cin会读取到空格为止。但是,我想不出什么方法来计算这一行有多少个数字……

如果能给我一点指引,我会非常感激,谢谢。

2 个回答

1

在C++中,你可以用方括号[]来访问字符串中的字符,就像访问数组一样。我建议你从输入流cin中读取一行内容到一个字符串里,然后用一个for循环遍历这个字符串,检查每个字符是否是空格。如果你找到一个不是空格的字符,就把它存储到你的数组里。

1

所以你只需要一点提示,这里有几个建议……

std::getline() - 这个函数可以让你从一个流中读取数据,并把它存储到一个叫做 std::string 的字符串里。

接着,你可以用刚刚读取的字符串来创建一个 std::istringstream 对象。然后你就可以用这个流来读取整数了。

比如说:

std::string line;
if(std::getline(std::cin, line))
{
  std::istringstream str(line);
  int lc;

  if (str >> lc) // now you have the line count..
  {
    // now use the same technique above
  }
}

哦,还有关于你提到的“动态大小数组”,你需要看看 std::vector<>

撰写回答