📅  最后修改于: 2023-12-03 14:39:40.871000             🧑  作者: Mango
在C语言中,如何实现字符串的反转(将字符串中的字符顺序颠倒)?
#include <stdio.h>
#include <string.h>
void reverse(char *str, int start, int end) {
if (start >= end) {
return;
}
char temp = str[start];
str[start] = str[end];
str[end] = temp;
reverse(str, ++start, --end);
}
int main() {
char str[] = "Hello, World!";
int len = strlen(str);
reverse(str, 0, len - 1);
printf("%s\n", str);
return 0;
}
递归是一种简洁、优美的解决字符串反转问题的方式。我们首先定义一个reverse
函数,它接收一个字符串指针str
、起始下标start
和结束下标end
。在reverse
函数内部,我们交换str[start]
和str[end]
的值,并递归调用reverse
函数,将start
加1,将end
减1。当start >= end
时,递归停止,字符串反转完成。
#include <stdio.h>
#include <string.h>
void reverse(char *str, int len) {
int start = 0, end = len - 1;
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
int main() {
char str[] = "Hello, World!";
int len = strlen(str);
reverse(str, len);
printf("%s\n", str);
return 0;
}
循环是另一种实现字符串反转的方式。我们定义一个reverse
函数,它接收一个字符串指针str
和字符串长度len
。在reverse
函数内部,我们维护两个指针start
和end
,初始值分别为字符串的首尾下标。我们使用一个循环,将str[start]
和str[end]
交换,并将start++
,end--
。当start >= end
时,循环停止,字符串反转完成。
使用递归和循环都可以实现字符串的反转。递归代码优美、简洁,但是可能会有栈溢出的问题。循环代码结构简单、逻辑清晰,适用于大多数场景。在实际开发中,我们应该根据实际需求选择适合的方法来解决问题。