[英]returning a string from a c++ function
我是一个初学者,我正在读一本有关C ++的书,而我正在阅读有关函数的一章。 我写了一个反向字符串,将其副本返回到main并输出。
字符串反向输入(字符串输入);
int main()
{
string input="Test string";
//cin>>input;
cout<<reverseInput(input);
return 0;
}
string reverseInput(string input)
{
string reverse=input;
int count=input.length();
for(int i=input.length(), j=0; i>=0; i--, j++){
reverse[j]=input[i-1];
}
return reverse;
}
以上似乎有效。 当我更改以下代码时,会发生此问题:
string input="Test string";
至:
string input;
cin>>input;
更改之后,反向函数仅返回第一个输入单词的反向,而不是整个字符串。 我不知道哪里出了问题。
最后,是否有一种更优雅的方式通过使用引用来执行此操作,而无需复制输入,以便修改输入变量本身?
问题出在cin
。 读取第一个空格字符后,它将停止读取。
请参阅本教程的“ cin和字符串”部分: http : //www.cplusplus.com/doc/tutorial/basic_io/
您可以使用getline(cin, input);
做你想做的。
cin >> input
读取一个单词。 要阅读整行,您应该使用getline
getline(cin, input);
在这种情况下,调试器非常有用,您可以看到逐步遍历程序的变量值。
一个简单的cout <<输入; 也会对您有所帮助,但是如果您仍然没有集成调试器的良好IDE,我建议您使用一个。 Eclipse是很好的开源软件。 如果您在Windows上,Visual Studio 2010 Express既好又免费。
cin>>input;
读一个单词,而不是一行。
使用例如getline(cin, input);
读一行
试试这个: istream& getline ( istream& is, string& str );
它从您提供的流(例如cin
提取整行,并将其保存到string
变量中。 例:
getline(cin, input);
cin.getline(...)
将在C样式字符缓冲区上工作。
就地反向功能已在此处详细解答:
您的代码的问题是std::cin
读取字符,直到遇到std::isspace(c)
返回true
字符为止。 因此,空格和换行符都是这样的字符,当传递给std::isspace
时返回true
。
因此,您基本上需要的是std::getline
:
std::string input;
if ( std::getline(std::cin, input))
{
std::cout << reverseInput(input);
}
else
{
std::cout <<"error while reading from standard input stream";
}
至于您有关参考和复制的问题:
string& reverseInput(string& input)
{
for (i = 0, j = input.length()-1; i < j; i++, j--)
{
char c = input[i];
input[i] = input[j];
input[j] = c;
}
return input;
}
您将参数作为参考传递,然后返回参考。 不涉及复制,并且在主体中,您没有定义任何新字符串,而是在同一实例上工作。
这不是您的反向函数中的错误,而是istream::operator>>
的标准行为,该行为仅读取到第一个空格字符为止。
您需要使用cin.getline(),cin >> s仅读取第一个单词(以空格分隔)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.