36-c语言字符串逆置
本文最后更新于 2026-03-05,文章内容可能已经过时。
在C语言中,字符串逆置最推荐使用循环法(通过交换首尾字符实现),它高效直接、无需额外空间且是标准C的通用实现;避免使用非标准的
strrev函数(如某些编译器提供但不跨平台);递归法虽可行但效率较低;实现时需注意正确计算字符串长度(用strlen)、处理输入安全(如用fgets避免溢出)并保留原字符串时可创建新数组。
字符串逆置是指将字符串中的字符顺序完全反转。在C语言中,有多种实现字符串逆置的方法。
一、循环法(非递归实现)
这是最常用、最直观的方法,通过两个指针从字符串两端向中间移动,交换字符。
代码实现:
#include <stdio.h>
#include <string.h>
void reverse_string(char str[]) {
int length = strlen(str); // 获取字符串长度
for (int i = 0; i < length / 2; i++) {
// 交换字符
char temp = str[i];
str[i] = str[length - i - 1];
str[length - i - 1] = temp;
}
}
int main() {
char input[100];
printf("请输入一个字符串:");
fgets(input, sizeof(input), stdin);
// 去掉换行符
input[strcspn(input, "\n")] = '\0';
reverse_string(input);
printf("逆置后的字符串是:%s\n", input);
return 0;
}
说明:
- 使用
strlen函数获取字符串长度 - 通过循环,将字符串首尾字符交换,直到中间位置
- 该方法直接修改原字符串,不需要额外空间
二、递归法
递归法将问题分解为更小的子问题,直到达到基本情况。
代码实现(数组方式):
#include <stdio.h>
#include <string.h>
int my_strlen(char *str) {
int count = 0;
while (*str != '\0') {
str++;
count++;
}
return count;
}
void reverse_string(char str[], int left, int right) {
if (left < right) {
char temp = str[left];
str[left] = str[right];
str[right] = temp;
reverse_string(str, left + 1, right - 1);
}
}
int main() {
char str[20];
printf("请输入字符串:>");
scanf("%s", str);
int left = 0;
int right = my_strlen(str) - 1;
reverse_string(str, left, right);
printf("逆序的字符串:%s\n", str);
return 0;
}
递归法(指针方式):
#include <stdio.h>
#include <string.h>
int my_strlen(char *str) {
int count = 0;
while (*str != '\0') {
str++;
count++;
}
return count;
}
void reverse_string(char *str) {
char temp = *str;
int len = my_strlen(str);
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (my_strlen(str + 1) >= 2) {
reverse_string(str + 1);
}
*(str + len - 1) = temp;
}
int main() {
char str[20];
printf("请输入字符串:>");
scanf("%s", str);
reverse_string(str);
printf("逆序的字符串:%s\n", str);
return 0;
}
三、注意事项
-
标准库函数:C标准库中没有
strrev函数(有些编译器如TC可能提供,但不是标准C的一部分)。所以不建议使用strrev,因为它不是可移植的。 -
字符串长度:使用
strlen获取字符串长度时,注意它不包括终止符\0。 -
字符串输入:使用
fgets比gets更安全,可以防止缓冲区溢出。 -
内存处理:上述方法都是直接修改原字符串,如果需要保留原字符串,可以创建一个新字符串来存储逆置结果。
四、其他方法
创建新数组存储逆置结果
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
char rev_str[100];
int i, len;
printf("请输入字符串:");
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0'; // 去掉换行符
len = strlen(str);
for (i = 0; i < len; i++) {
rev_str[i] = str[len - i - 1];
}
rev_str[len] = '\0'; // 添加终止符
printf("逆置后的字符串:%s\n", rev_str);
return 0;
}
总结
- 循环法:简单高效,是实现字符串逆置的首选方法
- 递归法:理解起来可能较难,但展示了递归思想
- 新数组法:保留原字符串,但需要额外空间
对于大多数应用场景,推荐使用循环法实现字符串逆置,因为它简单、高效且易于理解。
以上实现均基于C标准库,可以在各种C编译器中运行,不需要依赖特定的扩展函数。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

