当前位置:网站首页>编写一个函数 reverse_string(char * string)(两种方法实现)7.26
编写一个函数 reverse_string(char * string)(两种方法实现)7.26
2022-08-03 05:11:00 【tt142】
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
char arr[] = "abcdef"; //最后输出fedcba
目录.
1. 循环方式
2. 递归方式
首先声明
这里需要用到库函数strlen,当然我们也可以自己写一个函数代替
int my_strlen(char* string)
{
if (*string != '\0')
return 1 + my_strlen(string+1);
else
return 0;
}其次,如果只是逆序打印只需
#include<stdio.h>
void reverse_string(char* arr)
{
if (*arr != '\0')
reverse_string(arr + 1);
printf("%c",arr[0]);
}
int main()
{
char string[]="abcd";
reverse_string(string);
return 0;
}
1. 循环
用循环的方式更合适整个题目的要求
1.创建两个指针,一个在字符串左侧,另一个在最后一个有效位置
2.交换两个指针位置的字符
3.左指针++,右指针--,重复2.(循环出现)
#include<stdio.h>
#include<string.h>
void reverse_string(char* arr)
{
char* left = arr;
char* right = arr + strlen(arr) - 1;
while (right - left > 0)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char string[]="abcd"; //char string[50];
// scanf("%s", string);
reverse_string(string);
printf("%s ", string);
system("pause");
return 0;
}当然在这里我们也可以输入字符串,//后面就是
2.递归方式,第一种:依然采用上面的思路
#include<string.h>
#include<windows.h>
void reverse(char* arr, char* left, char* right)
{
if (right - left <= 0)
return;
char c = *left;
*left = *right;
*right = c;
reverse(arr, left + 1, right - 1);
}
int main()
{
char arr[50];
scanf("%s", arr);
int len =strlen(arr);
char* left = arr;
char* right = arr + len - 1;
reverse(arr, left, right);
printf("%s ", arr);
system("pause");
return 0;
}第二种
1. 交换第一个和最后一个有效元素
2.将最后一个元素放上\0,arr+1
void reverse_string(char* arr)
{
int len = strlen(arr );
char tmp = *arr;
*arr = *(arr + len - 1);
*(arr +len - 1) = '\0';
if(strlen(arr+1)>1)
reverse_string(arr + 1);
*(arr +len - 1) = tmp;
}
int main()
{
char string[]="abcdef";
//scanf("%s", string);
reverse_string(string);
printf("%s", string);
return 0;
}创作不易,感谢观看
边栏推荐
猜你喜欢

Build your own web page on the Raspberry Pi (2)

Build your own web page on raspberry pie (1)

数据分析 第一篇
网络流媒体下载的 10 种方法(以下载 Echo 音乐为例)

【转】最小描述长度准则MDL(Minimun Description Length)

VSO Downloader Ultimate 5.0.1.45 中文多语免费版 在线视频下载工具

嵌入式-I2C-物理电路图

Ali cloud object storage oss private barrels to generate links

Shell conditional statement judgment
![二叉树的合并[C]](/img/c2/08535044681dd477c0028b4306b77e.png)
二叉树的合并[C]
随机推荐
presto安装部署教程
初步认识ZK
Exception(异常) 和 Error(错误)区别解析
【Flask】Flask-SQLAlchemy的增删改查(CRUD)操作
力扣561. 数组拆分
信息编码、存储压缩与密码学
HarmonyOS应用开发培训第二次作业
Installation of Apache DolphinScheduler version 2.0.5 distributed cluster
1. 两数之和
VR全景展打造专属元宇宙观展空间
VSO Downloader Ultimate 5.0.1.45 中文多语免费版 在线视频下载工具
IO流及其操作
Pr第二次培训笔记
User password verification
13.< tag-动态规划和回文字串>lt.647. 回文子串 + lt.516.最长回文子序列
ss-4.2 多个eureka集群案例
阿里云对象存储oss私有桶生成链接
-钞票兑换-
Makefile介绍
D-PHY