当前位置:网站首页>编写一个函数 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;
}
创作不易,感谢观看
边栏推荐
猜你喜欢
随机推荐
【三子棋】7.25
Benchmark 第一篇 了解Benchmark
-最高分-
【特征选取】计算数据点曲率
lintcode2330 · 计算x秒后的时间
-一尺之棰-
Response 重写设置返回值
-最低分-
【扫雷】多方法超详细 7.28
Business table analysis - balance system
内部类、static关键字、final
Exception(异常) 和 Error(错误)区别解析
在树莓派上搭建属于自己的网页(1)
二叉树的合并[C]
Length n of condensed distance matrix ‘y‘ must be a binomial coefficient
junit总结
Kaggle 入门(Kaggle网站使用及项目复现)
对角矩阵(diagonal matrix)
-飞机大战-
typescript39-class类的可见修饰符