#c
#c
Вопрос:
Просто изучаю c . Следующая функция — это моя попытка изменить строку (не работает, и я не знаю почему). Спасибо, что заметили мою глупость.
#include <iostream>
using namespace std;
string r(string s)
{
int len = s.length();
for (int i = 0; i < len; i )
{
char temp = s[i];
s[i] = s[len - i];
s[len - i] = temp;
}
return s;
}
int main()
{
cout << r("ASTRING");
}
Она изменяет первую букву строки на ' '
и выводит STRING
Комментарии:
1. Выполняйте реверсирование на бумаге или в отладчике. Какие элементы меняются местами на первой итерации цикла? Какие элементы меняются местами в последнем?
2. привет, возможно
s[len - i]
, это выходит за рамки первой итерации.3. @Cool_Cornflakes
std::reverse()
уже делает это безопасным и надежным способом. Не изобретайте велосипед, особенно если он получается в виде квадрата.4. Проблема в том, что вы проходите весь путь через строку. Вы должны остановиться на полпути, иначе вы поменяете их местами, а затем поменяете их местами, проходя вторую половину.
5. @Cool_Cornflakes Чтобы познакомиться с c , вам следует сосредоточиться на изучении возможностей, которые вы можете получить из стандартной библиотеки. Это более продуктивно, IMO. Также пошагово просматривайте свой код построчно с помощью отладчика. Вы обнаружите проблему довольно быстро.
Ответ №1:
Другой простой способ:
string r(string s)
{
int len = s.length();
string temp;
for (int i = len - 1; i > -1; i--)
{
temp.push_back(s[i]);
}
s = temp;
return s; // or return temp;
}
Ответ №2:
Во-первых, string.length()
возвращает длину, с ''
которой означает конец строки, поэтому вам нужно удалить 1.
Во-вторых, вы не перемещаете всю строку целиком, вы должны остановиться на середине, i / 2 просто сделает это независимо от длины.
наконец :
string r(string s)
{
int len = s.length() - 1;
for (int i = 0; i < len/2; i )
{
char temp = s[i];
s[i] = s[len - i];
s[len - i] = temp;
}
return s;
}