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