读书人

中兴挪动的笔试题字符串的移动

发布时间: 2012-10-23 12:12:22 作者: rapoo

中兴移动的笔试题,字符串的移动
一道填空题:移动字符串内容,传入参数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';

}

[解决办法]

C/C++ code
#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;}
[解决办法]
纯粹是数学游戏,把握住规律就没难度了哈。

C/C++ code
#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;
}
[解决办法]
C/C++ code
while(m > 0) {        w[len] = w[i], w[i] = w[len - m], w[len - m] = w[len], i++, m--;} 

读书人网 >C语言

热点推荐