我是编码的初学者,并且朋友给了一个项目来反转用户输入的字符串的顺序,但是当我运行这段代码时,程序只是重复打印多次输入的字符串而且我'我不确定什么是错的。
例如,我输入"hi"
,它只打印"hi"
多次。我尝试过使用cin
,getline
和scanf
(根据朋友推荐),但无济于事......
#include <iostream>
using namespace std;
int main()
{
char arr[5];
getline(cin, arr);
for(int x=4; x>=0; x--){
cout << arr << endl;
}
return 0;
}
答案 0 :(得分:1)
由于问题标记为C++
,因此您应该使用C ++结构,例如std::string
和std::reverse
。这将使代码更具可读性和可理解性。
#include <string>
#include <iostream>
#include <algorithm>
int main()
{
std::string input;
std::getline(std::cin, input);
std::reverse(input.begin(), input.end());
std::cout << input << std::endl;
return 0;
}
答案 1 :(得分:0)
这一行错了:
cout << arr << endl;
您必须使用索引运算符[],如下所示:
cout << arr[x];
请注意,没有endl,因为它会打印新行中的每个字符。
使用arr [x]可以在索引 x 中为您提供数组的元素(或者如果您将使用字符串的字符)。请注意,C ++中的元素索引从0开始。因此第一个元素是arr [0],第二个是arr [1],依此类推。
另外,为什么要使用只有5号的C风格字符数组呢?您可以像使用C ++ std :: string一样有效,它可以用于更大的字符串:
string x;
getline(cin, x);
for (int i = x.size() - 1; i >= 0; i--)
{
cout << x[i];
}
cout << endl;
希望这有帮助。
答案 2 :(得分:0)
当您编写cout << arr << endl;
时,您将在循环的每次迭代中打印整个字符串。相反,您希望在索引x
处打印字符,因此您应将其写为cout << arr[x];
如果在循环内使用endl
,则每个字符后面都会有一个新行。
此外,在C ++中,使用字符串库有一种更简单的方法来处理字符串。然后,您无需事先在字符串中指定字符数,如果用户需要输入超过4个字符,则会有所帮助。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string arr;
getline(cin, arr);
for(int x=arr.size()-1; x>=0; x--){
cout << arr[x];
}
cout << endl;
return 0;
}
答案 3 :(得分:0)
您正在发生的事情是将arr
的全部内容发送至cout
5次。你想要的是反过来打印每个角色;为此,您需要在arr
循环中一次只发送一个for
字符:
cout << arr[x] // This sends the character at index x to cout
cout << arr // This sends the entire array to cout
此外,您应该在 cout << endl
循环之后for
;否则,您将在每个字母后打印换行符。
答案 4 :(得分:0)
使用迭代器的替代解决方案:
#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>
int main()
{
std::string input;
getline(std::cin, input);
for (std::string::reverse_iterator rit=input.rbegin(); rit!=input.rend(); ++rit)
std::cout << *rit;
return 0;
}