当前位置:网站首页>编写一个函数 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;
}创作不易,感谢观看
边栏推荐
猜你喜欢
随机推荐
Gradle的安装配置
【转】最小描述长度准则MDL(Minimun Description Length)
High availability, two locations and three centers
信息编码、存储压缩与密码学
Odps temporary query can write SQL, turned out to a named?
lintcode2330 · 计算x秒后的时间
Makefile介绍
C-PHY速率
Install IIS services (Internet Information Services (Internet Information Services, abbreviated IIS, Internet Information Services)
轨迹(形状)相似性判断与度量方法
在树莓派上搭建属于自己的网页(2)
3n+1问题
Pr第三次培训笔记
Flask的简单介绍及使用方法简介
判断回文数
高可用 两地三中心
Shell conditional statement judgment
第四次培训
-元素之和-
MySql数据库

![二叉树的合并[C]](/img/c2/08535044681dd477c0028b4306b77e.png)







