В следующей части строкового кода подкачки
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;
}
Я не понимаю адресную часть.
Дано
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*’
Вы должны знать тип end
является char*
, но тип str[len-1]
является char
, так что вам нужно изменить тип str[n-1]
в char*
так что тебе нужно &str[len-1]
,
Но если вы используете string
Будет простой способ:
Используйте метод std :: reverse из СТЛ:
std :: reverse (str.begin (), str.end ()); // str должен быть строковым типом
Вам нужно будет включить библиотеку «алгоритма», #include.
Может быть, это может помочь
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;
}
Я надеюсь, что это дает вам идею.