字符反转c语言

在C语言中,实现自定义字符反转有多种方法,以下为你详细介绍: #### 方法一:使用循环和辅助数组 ```c #include<stdio.h> #include<string.h> int exchange(char a[], char b[]) { int len, j = 0; len = strlen(a); for (int i = len - 1; i >= 0; i--) { b[j++] = a[i]; } b[j] = '\0'; // 末尾添上结束符 return 0; } int main() { char a[1000], b[1000]; gets(a); // 输入 exchange(a, b); puts(b); // 输出 return 0; } ``` 此方法定义了`exchange`函数,借助循环把原字符串从后往前逐个字符存到辅助数组,最后添上字符串结束符`'\0'`,达成字符反转[^1]。 #### 方法二:递归实现 ```c #include<stdio.h> // strlen函数,实现 int myStrlen(char arr[]) { if (*arr != '\0') { arr++; return 1 + myStrlen(arr); } return 0; } // 使用指针变量来接收实参(arr数组名) void reverse(char* arr) { // 首先通过自己实现的myStrlen()函数计算字符出的字符个数 int len = myStrlen(arr); int temp = *arr; // 1. 把a放在临时变量中 *arr = *(arr + len - 1); // 2.把f 放在a中(将字符串中最后一个元素放到首元素中) *(arr + len - 1) = '\0'; // 3 \0放到f上 (‘\0’往前移) // 核心:当代码执行到这里时对中间字符串进行处理,指针向后移动 // 只要字符串元素大于等于两个,重复上面代码,调用函数本身(递归) if (myStrlen(arr + 1) >= 2) // 4.bcde逆序 reverse(arr + 1); // 每次指针移动传入的地址也要对应 // 当中间所有字符串全都反转完毕结束 *(arr + len - 1) = temp; // 5 把a放在\0上 } int main() { // 创建一个字符数组 char arr[] = "abcdefg"; // 将数组名作为参数传递到自定义的反转字符串(递归)函数中 reverse(arr); printf("逆序后的字符串为:%s", arr); return 0; } ``` 该方法自定义了`myStrlen`函数来计算字符串长度,`reverse`函数利用递归,先交换首尾字符,再对中间字符串递归反转,最终实现整个字符反转[^2]。 #### 方法三:使用指针函数 ```c #include<stdio.h> // 自定义函数之字符反转 void fun(char a[100], int n) { int i, j; char b[100]; j = n - 1; for (i = 0; i <= n; i++) { b[i] = a[j]; j--; } printf("逆序之后的序列为:"); for (i = 0; i < n; i++) printf("%c", b[i]); return; } int main() { char a[100]; int i, n; printf("请问字母有多少个:"); scanf_s("%d", &n); for (i = 0; i < n + 1; i++) // n+1表示:包含了字符串末尾的\0的存储位置 scanf_s("%c", &a[i]); fun(a, n + 1); // n+1表示:包含了字符串末尾的\0的存储位置 // a表示把数组的首地址传过去 return 0; } ``` 此方法定义了`fun`函数,借助指针和辅助数组,把原字符串逆序存到辅助数组,最后输出逆序字符串[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值