面试宝典14.6 字符子串问题:
移动字符串内容,传入参数char *a和m,规则如下:将a中字符串的倒数m个字符移到字符串前面,其余依次像右移。例如:ABCDEFGHI,M=3,那么移到之后就是GHIABCDEF。
#include<stdio.h>
#include<string.h>
void fun(char *w,int m);
int main()
{
char w[30];
int m;
printf("请输入一个字符串\n");
gets(w);
printf("请输入移动的字符数\n");
scanf("%d",&m);
fun(w,m);
printf("移动后的结果为%s\n",w);
}
void fun(char *w,int m)
{
int i = 0,len = strlen(w);
printf("移动后的结果为%d\n",len);
if(m > len) // 此处对于输入的移动字符数超过字符串长度做了处理
m = len;
while(len-m > 0 || (m = 0) != 0) //(m=0)!=0的目的是在m > len给m赋值为0,使之不进入循环,还满足要求
for(i = 0,w[len] = w[0],++m;i < len;i++) //for循环是往前移动字符串 ,while是控制轮数
w[i] = w[i+1];
w[len] = '\0'; //补上因w[len] = w[0] 覆盖掉的'\0'
}
![奋斗](http://static.blog.csdn.net/xheditor/xheditor_emot/default/struggle.gif)