目录
题目要求😍:
题目内容❤:
题目分析📚:
设:真正挪动的次数为 time 字符串的长度为 len 输入的挪动次数为 k
time = k % len ;
主函数部分📕:
![](https://i-blog.csdnimg.cn/blog_migrate/ae9de2215b3998c2789793fef26d5d50.png)
- char* str = "abcd";会出现错误的原因是,这是一个字符指针,根据字符指针的原理,指向的字符串是一个字符常量,字符常量是不允许修改的。
- 而char str[ ]是一个字符数组,和字符常量无关。
方法一🐒:
- 进行一个一个的挪动,将需要挪动的字符放入一个新的变量中,后面的字符往前挪动。
- 因此,我们应该使用两个for循环解决问题,第一个for循环是为了解决挪动字符次数,第二个for循环是为了当挪动字符转移到新的空间后,其余的字符往前移动的遍历。
- 而在挪动的过程我们要注意一个越界问题,如上图:当挪动字符的下标抵达字符D的时候,我们就不因该在往后挪动,因为后面是字符A所需要放置的地点,且若进行挪动,那么字符A则会超出字符串的界限!
- 因此,为了不超过界限,我们将长度设限为 len-1
方法二🐒🐒:
- 利用库函数的方法,需要使用strcpy和strncat。
- 先设定一个指针是指向首字符的,随后将指针+需要挪动的次数,这样指针就指向了一个不需要挪动的字符,首把这个字符放进全新的变量中。
- 随后使用拷贝字符,进行将甚于的字符从字符数组中拷贝下来,与之前放进全新变量中的字符进行拼接。
- 随后使用拷贝字符,进行将甚于的字符从字符数组中拷贝下来,与之前放进全新变量中的字符进行拼接。
简略介绍😀:
strcpy(x,y)
y是指拷贝的内容,x是指将拷贝的内容y放置的空间!
strnact(x,y,z)
这是将y的内容拼接到x内容的末端,z是表示y内容的前z位拼接到x的末端,加入y是字符串,z是一个数字3,那么就是表示,字符串的前三位拼接到x内的末端。
方法三🐒🐒🐒:
- 将字符分为两部分,第一部分是需要挪动的字符,第二部分是不需要挪动的字符。
- 将两个部分内的字符都进行前后顺序对调翻转。
- 如图需要挪动的是,前两个字符。
- 到最后把整体都进行翻转。
- 这个两次的局部翻转,和最后经过两次局部翻转后的大翻转的理论基础原理是数组逆序,和下标位置的确定,以及翻转区间的确定。
- 就是0 和挪动次数减一,以及挪动次数和字符串长度减一两个区间。
- 这里的逆置原理是,左端的和右端的交换,left和right。