
刘老师为您分享以下优质知识
在C语言中实现汉字逆置,需注意汉字在内存中的存储方式(如UTF-8编码通常占用3个字节)。以下是两种常见方法:
一、使用指针交换字符(适用于UTF-8编码)
通过双指针法,从字符串两端向中间移动,逐个交换字符。这种方法适用于UTF-8编码的字符串,因为每个汉字占用3个字节。
示例代码:
```c
include
include
void reverseString(char *str) {
if (str == NULL) return;
char *start = str;
char *end = str + strlen(str) - 1;
while (start < end) {
char tmp = *start;
*start = *(end - 2);
*(end - 2) = tmp;
start += 3;
end -= 3;
}
*end = '0'; // 确保字符串终止
}
int main() {
char str[] = "你好呀我也好";
reverseString(str);
printf("%sn", str);
return 0;
}
```
二、逐字符交换(适用于单字存储)
若字符串采用单字存储(如Windows系统下GBK/GB2312编码,每个汉字2个字节),需逐个交换字符。但需注意,这种方法会破坏汉字的编码结构,不推荐使用。
示例代码:
```c
include
include
int main() {
char str[] = "世界你好";
int len = strlen(str);
char *start = &str;
char *end = &str[len - 1];
while (start < end) {
char tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
printf("%sn", str);
return 0;
}
```
注意事项
确保字符串编码与处理逻辑一致,避免因编码差异导致错误。
处理空字符串或单字符字符串时需特别小心。
双指针法时间复杂度为O(n/3),实际效率与单指针法相当,但代码更简洁。
推荐优先使用第一种方法,兼顾通用性和安全性。