中兴移动的笔试题,字符串的移动
一道填空题:移动字符串内容,传入参数char *a和m,规则如下:将a中字符串的倒数m个字符移到字符串前面,其余依次像右移。例如:ABCDEFGHI,M=3,那么移到之后就是GHIABCDEF。
注意不得修改原代码
void fun(char *w, int m)
{
int i=0; len=strlen(w);
if(m>len)
m = len;
while(__________){
_________________;
}
w[len-m] = '\0';
}
[解决办法]
#include <stdio.h>#include <string.h>void fun(char *w, int m){ int i = 0, len = strlen(w); if(m > len) m = len; while (m > 0) { memmove(w + 1, w, len), w[0] = w[len], m--; } w[len - m] = '\0';}int main(void){ char s[] = "123456"; printf("%s\n", s); fun(s, 2); printf("%s\n", s); return 0;}
[解决办法]
纯粹是数学游戏,把握住规律就没难度了哈。
#include<stdio.h>#include<stdlib.h>#include<string.h>void fun(char*,int);int main(){ char s[]="ABCDEFGH"; fun(s,3); puts(s); system("pause"); return(0);}void fun(char *w,int m){ int i=0,len=strlen(w); if(m>len) m=len; while(m) ++i%(len+1)?(w[len+1-i%(len+1)]=w[len-i%(len+1)]):(w[0]=w[len],m--); w[len-m]=0;}
[解决办法]
void convert(char *w, int m)
{
int i=0;
int len=strlen(w);
if(m>len)
m = len;
while(len-m > 0 || (m=0) != 0){
for(i=0,w[len]=w[0],++m;i<len;i++) w[i]=w[i+1];
}
w[len-m] = '\0';
}
int main()
{
char w[300] = {0};
strcpy(w,"ABCDEFGHI");
convert(w,3);
printf("######## w = %s\n",w);
return 0;
}
[解决办法]
while(m > 0) { w[len] = w[i], w[i] = w[len - m], w[len - m] = w[len], i++, m--;}