·下面2种写法[下标法+辅助数组法],注意写法2的for写法对;s=strcat(b,a)在main中未改s,不行(代码已调试好)
·全局变量m是输入的参数,n是strlen的字符串长度
【核心注意】strcat是字符串连接函数,str(b,a)意思是①将a连接到b后 且②b自动变成连完a后的b,不再是原来的b!b=str(b,a)或a=str(b,a)的写法编译错误!但s=str(b,a)编译正确,但是s=str(b,a)只能在函数中改s,出了函数s仍是之前的;但若用strcpy(s,str(b,a))则出了函数便也是在函数中改完了的(或用for逐字符改变函数中s的值,出了函数也能改)
#include
#include
int m;
void fun(char *s,int n){
// char a[150]; //写法一,下标法
// for(int i=0;i
// a[i]=s[i]; //s[i]可写成*(s+i)
// }
// for(int i=0,j=m;i
// s[i]=s[j];
// }
// for(int i=n-m,j=0;i
// s[i]=a[j];
// }
// printf("%s\n",s); //这种写法可以,函数外也不变
char a[150],b[150]; //写法二:辅助数组
int j=0;
for(int i=0;i<n;i++){
if(i<m){
a[i]=s[i]; //前m个字符放到a里
}else if(i>=m){
b[j++]=s[i]; //后n-m个字符放到b里
}
}
// s=strcat(b,a); //若用此不用下面的for的写法,此函数中的s虽对,但main中没改过来,不对。原因是s的值未变
// for(int i=0,j=0;i
// if(i
// s[i]=b[i];
// }else if(i>=n-m){
// s[i]=a[j++];
// }
// }
strcpy(s,strcat(b,a)); //此种写法行!
printf("%s\n",s); //for写法对;s=strcat(b,a)在main中未改s,不行
}
int main()
{
void fun(char *,int);
char str[]="ab123456789cde090",*p=str;
int n=strlen(str); //n为字符串长度
scanf("%d",&m); //输入m,要移几个
// puts(str); //原始排列
fun(p,n);
puts(str); //调整后排列
return 0;
}