字符串在C ++中不反转

时间:2019-04-29 05:51:46

标签: c++ c++11

我编写了一个程序,该程序可以反转用户输入的字符串,但是不起作用。我是使用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;
}

2 个答案:

答案 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;
}