Проблема с С++.

с++

string r(string s){string x;
unsigned int i=0;
unsigned int n;
while (i<s.length()){
n=s.length()-i;
x[i]=s[n];
i++;
}
return x;
};
int main(){
string s1;
cin>>s1;
cout<<r(s1)<<endl;
}
вроде простенькая программка для разворота строкик
компилируется нормально
но при введенном s1 длиннее одного символа выдает ошибку:
"string subscript out of range"
в чем проблема?

Примечание:
yagg,
string r(string s){string x;
unsigned int i=s.length();
while (i>=0){
x+=s[i];
i--;
}
при такой конструкции тоже не работает.
zZoMROT,
в этом-то и весь интерес!

Примечание:
Yagg,
всё равно ругается
а если поставить просто больше, то возвращает на один символ меньше(s[0] не читает)

Примечание:
Свистуновичу баллы, а тебе yagg-большое спасибо.
Ответы:
в си/си++ нету стандартного типа string, используйте массив символов
В string x не выделяется память => конструкция x[i]=s[n] неверна. Поменяйте на x+=s[n]
Наводящий вопрос: чему будет равно s[s.length()]?
зачем ставить просто больше, условие (i>=0) правильное. В последнем варианте неверно unsigned int i=s.length(); В строке нет элемента с индексом s.length(), индекс последнего s.length()-1.
В доп.#1 у Вас уже 2 ошибки.
Исправив одну ошибку - привнесли 2 новые. На ошибках учаться.
1ую уже указал Вам Yagg
2ая в условии (i>=0), для unsigned это условие ВСЕГДА ИСТИННО!
Если уж использовать средства STL, то...


16 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.