C语言多种方法实现一个函数左旋字符串中K个字符
前言
今天看到一个有趣的笔试题:实现一个函数,可以左旋字符串中的k个字符。示例如下:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
提示:以下是本篇文章正文内容,下面案例可供参考
法一、将左旋1次这个动作执行k次
这个方法的思路我来简单介绍一下:
现有1个字符串abcd
我们将a移出来,然后bcd前会空出一个位置
将bcd向前移动一个位置,最后把a放入最后一个位置,即可完成1次左旋
那么1次完成了,对于左旋k次呢?实际上也就是把上述操作再执行k-1次。
代码如下(示例):
#include<stdio.h> #include<assert.h> void left_move(char*arr, int k)//arr传过来的是首元素地址,你可以用一个指针去接收 { assert(arr); int i = 0; int len = strlen(arr);//计算arr的长度 for (i = 0;i < k;i++) { int j = 0; char tmp = *arr; for (j = 0;j < len - 1;j++) { arr[j] = arr[j + 1];//arr[j]=*(arr+j) } arr[len - 1] = tmp; } } int main() { int x = 0; char arr[] = "abcd"; printf("输入你想左旋几个字符:\n"); scanf("%d", &x); left_move(arr, x); printf("%s\n", arr); }
ps:这里多使用一个assert是为了防止函数传过来的是空指针,会进行断言,如果传的是空指针,系统会报错
法二、多次逆序字符串
我们以ABCDEF左旋2次进行举例:
左旋2次也就是把AB移动到CDEF后面,下面看我操作,先将AB、CDEF分为两个组
将两个组分别逆序
最后整体逆序得到最终结果CDEFAB
那么左旋k次也就是把2变成k即可,整体仍然是这3个步骤,非常方便
代码如下(示例):
#include<stdio.h> #include<assert.h> void reverse(char*l, char*r)//逆序函数 { assert(l&&r); while (l < r) { char tmp = *l; *l = *r; *r = tmp; l++; r--; } } void left_move(char*arr, int k) { assert(arr); int len = strlen(arr); reverse(arr,arr+k-1);//第一个组逆序 reverse(arr+k,arr+len-1);//第二个组逆序 reverse(arr,arr+len-1);//整体逆序 } int main() { int x = 0; char arr[] = "abcdef"; printf("输入你想左旋几个字符:\n"); scanf("%d", &x); left_move(arr, x); printf("%s\n", arr); }
ps:关于每一次的逆序函数:以abcd举例,就是a和d换位,b和c换位,得到dcba,然后这样的逆序进行三次即可得到所谓的左旋。
以上就是C语言多种方法实现一个函数左旋字符串中K个字符的详细内容,更多关于多种方法实现一个函数的资料请关注猪先飞其它相关文章!
原文出处:https://blog.csdn.net/m0_57180439/article/details/120246640
相关文章
- 这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- 本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
- 这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
- 这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
- 这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
- JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
详解C语言中的rename()函数和remove()函数的使用方法
这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25- 文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
- 这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
- 这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25