从c++;作用 我是一个初学者,我正在读一本C++的书,我正在写一篇关于函数的章节。我编写了一个函数来反转一个字符串,将它的一个副本返回到main并输出它

从c++;作用 我是一个初学者,我正在读一本C++的书,我正在写一篇关于函数的章节。我编写了一个函数来反转一个字符串,将它的一个副本返回到main并输出它,c++,string,function,words,C++,String,Function,Words,字符串反向输入(字符串输入) 致: 更改后,reverse函数只返回第一个输入单词的倒数,而不是整个字符串。我不知道我哪里出了问题 最后,有没有一种更优雅的方法可以做到这一点,即使用引用而不复制输入,从而修改输入变量本身?cin>>input读取一个单词。要读取整行,应该使用getline getline(cin, input); 调试器在这种情况下非常有用,您只需在程序中逐步查看变量的值即可 一个简单的coutcin>>输入读取一个单词。要读取整行,应该使用getline getline(c

字符串反向输入(字符串输入)

致:

更改后,reverse函数只返回第一个输入单词的倒数,而不是整个字符串。我不知道我哪里出了问题


最后,有没有一种更优雅的方法可以做到这一点,即使用引用而不复制输入,从而修改输入变量本身?

cin>>input
读取一个单词。要读取整行,应该使用getline

getline(cin, input);
调试器在这种情况下非常有用,您只需在程序中逐步查看变量的值即可


一个简单的cout
cin>>输入
读取一个单词。要读取整行,应该使用getline

getline(cin, input);
调试器在这种情况下非常有用,您只需在程序中逐步查看变量的值即可

一个简单的方法是尝试以下方法:

它从您提供的流(例如,
cin
)中提取整行,并将其保存到
字符串
变量中。例如:

getline(cin, input);
将在C样式的字符缓冲区上工作。

请尝试以下操作:

它从您提供的流(例如,
cin
)中提取整行,并将其保存到
字符串
变量中。例如:

getline(cin, input);

将在C样式的字符缓冲区上工作。

cin>>输入读取一个单词,而不是一行


使用例如
getline(cin,输入)
读取一行输入读取一个单词,而不是一行


使用例如
getline(cin,输入)
要读取行

问题在于
cin
。它在读取第一个空格字符后停止读取

请参阅本教程的“cin和字符串”部分:


您可以使用
getline(cin,输入)
来做你想做的。

问题在于
cin
。它在读取第一个空格字符后停止读取

请参阅本教程的“cin和字符串”部分:


您可以使用
getline(cin,输入)istream::operator>
的标准行为,它只读取到第一个空格字符。

这不是反向函数中的错误,而是
istream::operator>
的标准行为,仅在第一个空格字符之前读取。

此处已详细回答了在位反转功能:


此处已详细回答了就地倒车功能:


代码的问题是
std::cin
读取字符,直到遇到返回
true
的字符为止。所以空格和换行符都是这样的字符,当传递到
std::isspace
时返回
true

所以你基本上需要的是:

std::字符串输入;
if(std::getline(std::cin,输入))
{

std::cout代码的问题是,
std::cin
读取字符,直到遇到一个返回
true
的字符。因此,空格和换行符都是这样的字符,当传递到
std::isspace
时返回
true

所以你基本上需要的是:

std::字符串输入;
if(std::getline(std::cin,输入))
{

std::cout您需要使用cin.getline(),cin>>s将只读取第一个单词(由空格分隔)

您需要使用cin.getline(),cin>>s将只读取第一个单词(由空格分隔)

关于引用和复制的问题:

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;
}
字符串和反向输入(字符串和输入)
{
对于(i=0,j=input.length()-1;i

您将参数作为引用传递,然后返回引用。不涉及复制,并且在正文中,您不定义任何新字符串,您正在处理同一个实例。

关于引用和复制的问题:

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;
}
字符串和反向输入(字符串和输入)
{
对于(i=0,j=input.length()-1;i

您将参数作为引用传递,然后返回一个引用。不涉及复制,并且在正文中,您不定义任何新字符串,您正在处理同一个实例。

这对他的情况没有帮助,因为他仍然错误地读取字符串。同意,但只得到第一个单词已经回答了好几次:-)啊,对不起,我读得太多了,他说明确要求提供一个就地版本。这对他的情况没有帮助,因为他仍然错误地读取字符串。同意,但只获取第一个单词已经被回答了好几次:-)啊,对不起,我没有读到他明确要求提供就地版本。你的反向函数有一个bug。你应该使用
I>0
作为
for
在最后一次迭代中,
i==0
j==input.length()
导致
反向[input.length()]=input[-1]
,这两个都超出了范围。您的反向函数中有一个错误。您应该使用
i>0
作为
for
条件。在上一次迭代中
i==0
j==input.length()
导致
reverse[input.length()]=input[-1]
,这两个都超出了范围。感谢您的输入。我将开始使用调试器。感谢您的输入。我将开始使用调试器。
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;
}