编写一个名为copy的函数的定义,该函数读取所有 要在标准输入中读取的字符串并显示它们,一个 在没有其他间距的线上,在标准输出上。不要使用任何类型的循环(for,while等)。
我尝试过类似的事情:
void copy()
{
string x;
getline(cin, x);
cout << x << "\n";
if(cin){
copy();
}
else{
return;
}
}
但我可能不完全理解&#34;所有剩余的字符串都要在标准输入中读取&#34;手段。有人可以帮助我吗?
答案 0 :(得分:1)
递归是满足教师的奇怪限制的正确理念,但如果您想要存储输入,请查看std::getline
以及std::cin
的运算符和方法以正确使用在变量等中。当前读取的值存储在名为x
的临时字符串中,用于堆栈上函数调用的每个范围。
修改:虽然您在技术上并不需要其他情况,但是在最后一次调用copy();
后堆栈将展开,因此它没有什么特别的错误。 #39;无效功能无需返回。
答案 1 :(得分:0)
void copy()
{
{ // create a scope...
string x;
if (getline(cin, x))
cout << x << "\n"; // don't output 'x' when getline fails!
} // let x go out of scope - less baggage during recursion...
if(cin)
copy();
}
这个问题有点含糊......
...读取标准输入中剩余要读取的所有字符串,并将其显示在一条没有其他间距的行上,并显示在标准输出上。
是&#34;字符串&#34;有必要像一条线?我怀疑不是的一个原因是因为如果是的话,问题甚至少有趣(并且你认为不可能!) - 一个合理的答案:
std::cout << std::cin.rdbuf();
另一个原因是&#34;没有间距&#34; ...也许是指每一行上的前导和尾随空格,或者意图是每个空格分隔的值被认为是一个字符串,您需要哪种情况:
void copy()
{
{
string x;
if (cin >> x);
cout << x << "\n";
}
if (cin)
copy();
}
任何人都猜到了哪个......