我编写了一个程序,该程序可以反转用户输入的字符串,但是不起作用。我是使用Reverse the string in C++中的string reverse_name(name.rbegin(), name.rend())
来完成此操作的,但是它不起作用,并给我错误:
no viable conversion from 'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reverse_iterator' (aka 'reverse_iterator<__normal_iterator<char *, std::__cxx11::basic_string<char> > >') to 'std::__cxx11::string' (aka 'basic_string<char>') string reversed_word = (word.rbegin(), word.rend());
我的代码:
#include <iostream>
using namespace std;
int main()
{
string word, reversed_word;
cin >> word;
reversed_word = (word.rbegin(), word.rend());
cout << reversed_word;
return 0;
}
答案 0 :(得分:4)
此行是错误的:
reversed_word = (word.rbegin(), word.rend());
错误消息不言自明。这是一个简化的版本,可帮助您更轻松地理解:
从'reverse_iterator'...到...'std :: string'的可行转换
您不能为字符串分配(反向)迭代器,但这正是您要尝试做的。表达式(word.rbegin(), word.rend())
不会像您期望的那样构造新的字符串。它只是按原样评估两个迭代器,并用comma operator分隔,这两个迭代器返回右侧的值。因此,上面的行实际上与此相同:
reversed_word = word.rend();
要执行您要尝试的操作,您需要将迭代器传递给std::string
构造函数。像这样:
string reversed_word;
...
reversed_word = string(word.rbegin(), word.rend());
或者像这样的 1 :
string reversed_word(word.rbegin(), word.rend());
1:如this answer所示,是您链接到的问题,甚至显示在您自己的问题中,您说“我使用...做到了”。
答案 1 :(得分:0)
最简单的方法。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string word, copy;
cin >> word;
copy = word
reverse(word.begin(), word.end());
cout << copy << endl;
cout << word << endl;
return 0;
}