我不熟悉c ++编程,并且没有掌握最基本的技术。
我的问题是我想将字符读入数组并使该数组与输入一样长。例如,如果输入为'a','b'和'c',则数组的长度为3.在java中,对于使用StdIn包的整数,这将是这样的:
int[] n = StdIn.readInts(); //enter the numbers 5,6,7,8 f.x.
StdOut.println(n.length); //would print 4
希望我很清楚。
答案 0 :(得分:2)
您可以轻松使用std::vector
来存储您的输入。例如,使用push_back
或emplace_back
,您可以根据需要推送尽可能多的元素。您将能够通过size
成员函数检索数组的大小。
以下是一个例子:
std::vector<char> vector;
for (int i = 0; i < 3; i++) {
char buffer;
std::cin >> buffer;
vector.push_back(buffer);
}
上面的代码会要求3个字符并将它们存储到vector
中。 vector
接口有一个方便的“类似数组”接口,您可以使用它。例如,要检索第三个元素,您可以使用vector[2]
。
答案 1 :(得分:2)
在C ++中,它很容易做到:
std::vector<int> int_vector;
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(int_vector));
参考文献:
答案 2 :(得分:0)
如果您想阅读用户输入的所有数字,那么您可以这样做:
int number;
std::vector<int> numbers;
while (std::cin >> number)
numbers.push_back(number);
答案 3 :(得分:0)
如果您看一下StdIn.readInts的实现,您会看到它可以分两步描述:
这可以模仿C ++编写类似的类,使用类似的方法,或者在您需要它们的时候执行上述步骤,考虑到std::vector
可能比C ++数组更接近Java数组,并且std::vector
可以在dinamycally生长。
在您的示例中,要读取由“空格”分隔的整数列表,
#include <iostream>
#include <vector>
int main()
{
std::vector<int> n;
int tmp;
while(std::cin >> tmp) {
n.push_back(tmp);
}
std::cout << n.size() << "\n";
return 0;
}
足够(但是看看其他答案,空气中有一个很好的std::copy
解决方案),但如果你想模仿Java行为(如果我打算正确地阅读代码),那就像
#include <iostream>
#include <vector>
#include <sstream>
int main()
{
std::vector<int> n;
// read in the "pieces" as string
std::vector<std::string> ns;
std::string tmps;
while(std::cin >> tmps) {
ns.push_back(tmps);
}
// pre C++11 way... try to interpret the "pieces" as int
for (std::vector<std::string>::const_iterator it = ns.begin();
it != ns.end();
++it)
{
int tmp;
if (std::istringstream(*it) >> tmp) {
n.push_back(tmp);
}
}
std::cout << n.size() << "\n";
// post C++11 way, just to test...
for (auto v : n) std::cout << v << "\n";
return 0;
}
应该更接近Java StdIn.readInt()
的作用(再次,根据我对它的理解,动态阅读代码)。