专注于高等教育
科普综合平台
在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),实际效率与单指针法相当,但代码更简洁。
推荐优先使用第一种方法,兼顾通用性和安全性。