Строка, не обращающаяся в C ++ - PullRequest
0 голосов
/ 29 апреля 2019

Я написал программу, которая переворачивает строку, введенную пользователем, но она не работает. Я сделал это, используя string reverse_name(name.rbegin(), name.rend()) из Перевернуть строку в C ++ , но она не работает и выдает ошибку:

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 ]

4 голосов
/ 29 апреля 2019

Эта строка неверна:

reversed_word = (word.rbegin(), word.rend());

Сообщение об ошибке не требует пояснений. Вот упрощенная версия, чтобы вам было легче ее понять:

нет жизнеспособного преобразования из 'reverse_iterator' ... в ... 'std :: string'

Вы не можете назначить (обратный) итератор для строки, но это именно то, что вы пытаетесь сделать. Выражение (word.rbegin(), word.rend()) не создает новую строку, как вы ожидаете. Он просто оценивает два итератора как есть, разделенные оператором запятой , который возвращает значение справа. Таким образом, приведенная выше строка практически такая же:

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: как показано в в этом ответе на вопрос, с которым вы связаны, и даже показано в вашем собственном вопросе, где вы говорите: «Я сделал это, используя ...».

0 голосов
/ 29 апреля 2019

Самый простой способ сделать это.

#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...