Обратная строка в переполнении стека

В следующей части строкового кода подкачки

 end = &str[len - 1];

Я не понимаю адресную часть. Когда я делаю это без адресации, он все еще работает, но выдает предупреждение, что «значения типа char не могут быть присвоены идентификатору типа char». Вот полный код:

    #include<iostream>
#include<cstring>
using namespace std;

int main()
{
char str[] = "This is a test";
char *start, *end;
int len;
int t;

cout << "Original " << str << "\n";
len = strlen(str);
start = str;
end = str[len - 1];

//this reverses the string
while (start < end) {

t = *start;
*start = *end;
*end = t;

start++;
end--;

}
cout << "Reversed" << str << "\n";
system("PAUSE");
return 0;
}

0

Решение

Я не понимаю адресную часть.

Дано

char str[] = "This is a test";
char *start, *end;
len = strlen(str);

затем end указатель на символ, и

end = &str[len - 1]; // `end` points to the last character (before the `\0`)

Вы должны использовать & (адрес) оператора, потому что end является указателем, и поэтому он должен быть назначен на адрес чего-либо (здесь адрес последнего символа строки).

Когда я делаю это без адресации, он все равно работает

Я не думаю, что это произойдет — у вас должна была быть ошибка компиляции

end = str[len - 1]; // invalid conversion from ‘char’ to ‘char*’
1

Другие решения

Вы должны знать тип end является char*, но тип str[len-1] является char, так что вам нужно изменить тип str[n-1] в char*так что тебе нужно &str[len-1],

Но если вы используете stringБудет простой способ:

Используйте метод std :: reverse из СТЛ:

std :: reverse (str.begin (), str.end ()); // str должен быть строковым типом

Вам нужно будет включить библиотеку «алгоритма», #include.

0

Может быть, это может помочь

void reverse (char word[])
{
int left = 0;
int right = strlen(word) - 1;

while (left < right)
{
char temp = word[left];
word[left] = word[right];
word[right] = temp;
left++;
right--;
}
cout << word;

}

Я надеюсь, что это дает вам идею.

0
По вопросам рекламы [email protected]