当前位置: 首页 > wzjs >正文

潍坊网站建设公司推荐站长工具外链查询

潍坊网站建设公司推荐,站长工具外链查询,电子商务网站建设与实例,博采网站建设题目: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一: 我们画个图分析一下: 基本逻辑: 就是我们每一次旋转之前,我们就取出…

题目:

实现一个函数,可以左旋字符串中的k个字符。

例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB

方法一:

我们画个图分析一下:

b920d5c1c0f3467296f9cc65526cf8f0.png

基本逻辑:

就是我们每一次旋转之前,我们就取出 arr 数组的首元素存放在 tmp 中,然后将 arr 数组剩余的每一个元素都往前移动一位,最后我们再把 tmp 中的元素放回 arr 数组末尾的位置。

实现算法:

我们发现,abcd 4个字符旋转 k = 4 个字符时,数组就回到了本身数组 abcd 。这时,我们可以这样理解,虽然我们旋转了4个字符,但我们实际上我们旋转了0个字符;依次类推,旋转5个字符,实际上旋转了1个字符;接下去也是如此......接下来,我们再把字符长度加长,变成abcde 5个字符,旋转 k = 5 个字符时,数组就回到了本身数组 abcde,后面的分析就跟4个字符分析是一样的。然后,我们能够得到这样一个表达式 num(实际次数) = k % len(数组字符个数)。

代码实现:

#include <stdio.h>
#include <string.h>void Turn_left(char arr[],int k)
{int len = strlen(arr);//求得真实的旋转次数int num = k % len;for (int i = 0; i < num; i++){//每次移动一个char tmp = arr[0];int j = 0;for (j = 0; j < len - 1; j++){//移动数据arr[j] = arr[j + 1];}arr[j] = tmp;}
}
int main()
{char arr[] = "abcd";int k = 0;scanf("%d", &k);//输入旋转字符个数Turn_left(arr, k);printf("%s\n", arr);return 0;
}

运行结果:

900747953191454fa010f03f7dda81aa.png

方法二:

我们也可以画个图分析一下:

375f845101e249ff824d9e5b959b1fdd.png

这里我们要用到两个函数:

strcpy() //字符串拷贝
strcpy(str1,str2)//将str2的元素拷贝到str2中strncat()//这也是字符串拷贝
strncat(tmp,arr,k)//把arr开始的元素 拷贝到tmp这个字符串的后面,拷贝k个

代码实现:

#include <stdio.h>
#include <string.h>void Turn_left(char arr[], int k)
{int len = strlen(arr);int num = k % len;char tmp[1000] = { 0 };//从arr + num的位置 开始拷贝字符串到tmp里面 strcpy(tmp, arr + num);//把arr开始的元素 拷贝到tmp这个字符串的后面,拷贝num个strncat(tmp, arr, num);//最后将tmp整个数组元素复制到arr数组中strcpy(arr, tmp);
}int main()
{char arr[] = "abcd";int k = 0;scanf("%d", &k);//输入旋转字符个数Turn_left(arr, k);//2printf("%s\n", arr);return 0;
}

运行结果:

528a5e99ba6343d6ba5b5b30eb68e81c.png

方法三:

最后一种方式我们也画图分析一下:

39ae9f1a5735427b925a6bc7e96f1ba3.png

代码实现:

#include <stdio.h>void Reverse(char arr[], int i, int j)
{while (i < j){char tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;i++;j--;}
}void Turn_left(char arr[], int k)
{int len = strlen(arr);int num = k % len;//将num位置前面的元素逆序Reverse(arr, 0, num - 1);//将num位置以及之后的元素逆序Reverse(arr, num, len - 1);//整个数组逆序Reverse(arr, 0, len - 1);
}int main()
{char arr[] = "abcd";int k = 0;scanf("%d", &k);//输入旋转字符个数Turn_left(arr, k);//2printf("%s\n", arr);return 0;
}

运行结果:

49633af2b86e4360b02545f7bc77190c.png

http://www.dtcms.com/wzjs/429041.html

相关文章:

  • 临沂哪家做网站最好淄博网站seo
  • 莆田seo建站百度账号注册入口
  • 昆明网站制作百度快照是啥
  • 宁波网站建设怎么做深圳百度代理
  • 网站备案需要关闭适合中层管理的培训
  • 盘州市城乡建设局网站网络推广大概需要多少钱
  • 嘉兴网站开发与制作今日新闻摘抄10条简短
  • 驻马店网站建设价格人民网疫情最新消息
  • 中国建筑装饰网家居频道搜索引擎优化是什么意思啊
  • 怎样建网站邢台关键词排名优化易下拉技巧
  • 想买个服务器做网站环球资源外贸平台免费
  • 海淀公安局网站备案关键词优化排名费用
  • 南京网站建设哪家专业如何用手机制作网站
  • 龙岗网站-建设深圳信科安卓系统优化app
  • 西安模板网站搜狗关键词排名此会zjkwlgs
  • 软件网络推广方案吉林seo刷关键词排名优化
  • 仿美团版网站开发制作软文自助发稿平台oem
  • 工作手机微信管理系统seo外链工具有用吗
  • 菏泽百度网站建设成品网站seo
  • 网站运营专员具体每天怎么做正规网站建设公司
  • 久商推网站建设雷神代刷网站推广
  • 微博网站模板 cssqq空间秒赞秒评网站推广
  • 网站建站网站设计公司网站一键收录
  • 有哪些做特卖的网站竞价托管公司
  • 马尾福州网站建设深圳网络提速优化服务包
  • 过年做那些网站致富短视频seo厂家
  • 国内做焊接机器人平台网站竞价托管如何托管
  • 网站设计前景怎样外贸网站建设流程
  • 网站访问量查询工具查看今日头条
  • 中型网站开发周期西安seo王尘宇