[英]Reversing string in C++
在下面的字符串交換代碼部分
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
是指向char的指針,並且
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
,將有一個簡單的方法:
使用STL的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;
}
我希望這能給你這個主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.