Ваш код, кажется, смешивает понятия использования индекса (например, 0
или strlen(s)-1
) или использования указателей. Даже в комментарии вы написали «поменяйте местами символы s[i]
и s[j]
», но вы объявили i
и j
как char*
переменные.
Вторая ошибка заключается в том, что вы меняете значения указателя, а не символы, на которые указывают указатели.
Вы должны решить, хотите ли вы использовать указатели или указатели для доступа к символам.
Решение с использованием указателей:
void stringReverse(char* s){
//in order to swap the characters s[i] and s[j] make a temp
char temp;
char* i = s;
/* according to the standard, the behavior is undefined if the result
* would be one before the first array element, so we cannot rely on
* char* j = s + strlen(s) - 1;
* to work correct. */
char* j = s + strlen(s);
if(j > i) j--; // subtract only if defined by the C standard.
while(i < j){
temp = *i;
*i = *j;
*j = temp;
i++;
j--;
}
//end of the while loop means that it reversed everything (no need for if/else)
}
Решение с использованием индекса:
void stringReverse(char* s){
size_t i = 0;
size_t j = strlen(s)-1;
//in order to swap the characters s[i] and s[j] make a temp
char temp;
while(i < j){
temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
//end of the while loop means that it reversed everything (no need for if/else)
}
Компилятор должен предупреждать о некоторых проблемах в исходном коде, если включено достаточное количество предупреждений. Я предлагаю всегда включать как можно больше предупреждений.