繁体   English   中英

从C ++函数返回字符串

[英]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样式字符缓冲区上工作。

就地反向功能已在此处详细解答:

如何在C或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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM