一、题目要求
编写一个函数,根据用户定义字符串和需要移动字符的位数n,将该字符串从右边起n个字符顺序不变的放在该字符串的前面。例如:将 helloworld 右移两位为 ldhellowor .
二、问题分析
首先这个函数是有两个参数,字符串str和移动位数n。我在这里的思路是:先计算出该字符串的长度len,再设置一个指针p指向该字符串需移动字符的前一个字符,即字符r,开辟一个临时的数组来存放需要移动的字符,该临时数组是指针tmp指向的,然后将p指向n+1个字符处,把str中剩下的字符拷贝入tmp中,在进行此操作之前要记住需给该字符串添加一个结束标志。最后,函数需要的是输出改变后的数组,所以还需要将临时数组中存放的字符串重新拷回原字符串中输出即可。
值得提醒的一点是:这里使用了动态申请内存空间,需要引用头文件 #include<stdlib.h>,记住还需要手动释放申请空间。
三、代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void right_str(char *str,int n)
{
int len = strlen(str) + 1;
char *p = str + len -1 - n;
char *tmp = (char *)malloc(len * sizeof(char));
if( tmp == NULL)
{
printf("alloc error\n");
exit(-1);
}
strncpy(tmp,p,n);
*p = 0;