reverse[n]
вызывает проблему строки вне индекса.Вы только что создали строку и ее размер равен нулю.Вот как это исправить:
#include <string>
#include <iostream>
using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::getline;
int main()
{
string example;
getline(cin, example);
int i = 0;
while (example[i] != '\0')
{
i++;
}
int n=0;
string reverse(example.size(), 0);
while (n < i)
{
reverse[n] = example[i - n - 1];
n++;
}
cout << reverse << endl;
return 0;
}
Однако в этом коде все еще много неправильного.Например, хранить размер строки в int
- плохая идея.Используйте std::string::size_type
вместо этого.И std::string::size
уже дает вам размер, не нужно его считать.Также рассмотрите возможность использования цикла for здесь:
#include <string>
#include <iostream>
using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::getline;
int main()
{
string example;
getline(cin, example);
string reverse(example.size(), 0);
for (string::size_type n = 0; n != example.size(); ++n)
{
reverse[n] = example[example.size() - n - 1];
}
cout << reverse << endl;
return 0;
}
Сказав это, вот как я бы это реализовал:
#include <string>
#include <iostream>
using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::getline;
int main()
{
auto example = string();
getline(cin, example);
auto reverse = string(example.crbegin(), example.crend());
cout << reverse << endl;
return 0;
}
Обязательно ознакомьтесь с обратными итераторами если вы еще не.