#include <stdio.h>
#include <string.h>
int main()
{
char s[200];
scanf("%[^\n]",s);//scanf相较于gets,不会出现越界问题
int N;
scanf("%d",&N);
char* p = s;
int len = strlen(s);
for(int i=0;i<N;i++){
*(p+i+len) = *(p+i);
}//将左边的放在字符串最后边 ,此时前面还未处理
for(int k=0;k<N;k++){
for(char* j=s;*j;j++){
*j = *(j+1);
}
}//去除头部字符
for(int k=0;k<len;k++){
printf("%c",s[k]);
}//直接输出N较大时会有乱码,于是遍历输出
return 0;
}
字符串数组的题小细节太多了,先上码
输入一个字符串和一个非负整数N,要求将字符串循环左移N次。
输入格式:
输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
输出格式:
在一行中输出循环左移N次后的字符串。
反思:
1.向后移动字符串数组时要预留多一点空间
2.移动过的字符串数组输出时尽量采用遍历,否侧结尾可能出现乱码