将输入读取到动态大小的数组中
我想做的事情是,从标准输入读取一行,并用空格来分隔这行内容。
假设我的输入是这样的:
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<>
。