当前位置:网站首页>编写一个函数 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;
}创作不易,感谢观看
边栏推荐
猜你喜欢

快速上手 Mockito 单元测试框架

CAD有生僻字如何打出来、如何提交软件相关问题或建议?

Tag stack - stack monotonically preparatory knowledge - lt. 739. The daily temperature

Pr第四次培训笔记

Installation of Apache DolphinScheduler version 2.0.5 distributed cluster

轨迹(形状)相似性判断与度量方法

js实现一个 bind 函数

传说中可“免费白拿”的无线路由器 - 斐讯 K2 最简单刷 breed 与第三方固件教程

设计模式——组合模式、享元模式(Integer缓存)(结构型模式)

Alienware上线首个数字时装AR试穿体验
随机推荐
js实现一个 bind 函数
odps的临时查询能在写sql的时候就给结果一个命名不?
Ali cloud object storage oss private barrels to generate links
2017-06-11 Padavan 完美适配newifi mini【adbyby+SS+KP ...】youku L1 /小米mini
tag单调栈-单调栈预备知识-lt.739. 每日温度
PotPlayer实现上班摸鱼电视自由
minio下载文件乱码或者是一条横线
Makefile语法
【扫雷】多方法超详细 7.28
Detailed explanation of MOSN reverse channel
深度学习入门之GRU
3n+1问题
Redis6学习笔记
私有变量(private) 【详细+易懂】
CAD有生僻字如何打出来、如何提交软件相关问题或建议?
lintcode2330 · 计算x秒后的时间
1058 选择题 (20 分)(C语言)
-查找数-
Exception (abnormal) and Error (error) difference analysis
求因子数量