@C语言大神,萌萌哒代码求修改(谢绝新代码,谢谢^0^)

题目:编写一个函数,函数的功能是移动字符串中的内容。移动的规则如下:把第1到第m个字符,平移到字符串的最后;再把第m+1到最后的字符移动到字符串的前部。例如,字符串中原由的内容为: ABCDEFGHIJK, m的值为3,则移动后,字符串中的内容应该是DEFGHIJKABC。不得改变main函数。
# include<stdio.h>
# include<string.h>
int main()
{
char a[80],*pa=a;
int m;
void func (int m,char *pa);
gets(a);
scanf("%d",&m);
func (m,pa);
puts(a);
}
void func(int m,char *pa)
{
int k,i,num;
char a_end,a[80];
for(k=0;a[k]!='\0';)k++;//算出元素a[]的有多少个
a_end=*(a+k-1);
for(i=k-1;i>0;i--) *(a+i)=*(a+i-1);//m以后的每个元素后移一次
*a=a_end;//末尾字母往前移
m--;
while(m>0) func(m,pa);
}

你的算法错了,你的是左移m位了,我帮你改了一下,还有不能用while,否则是死循环:

# include<stdio.h>
# include<string.h>
int main()
{
    char a[80],*pa=a;
    int m;
    void func (int m,char *pa);
    gets(a);
    scanf("%d",&m);
    func (m,pa);
    puts(a);
}
void func(int m,char *pa)
{
    int k,i,num;
    char a_end;
    for(k=0;pa[k]!='\0';)k++;//算出元素a[]的有多少个
    a_end=*pa;
    for(i=0;i<k-1;i++) *(pa+i)=*(pa+i+1);//m以后的每个元素后移一次
        *(pa+k-1)=a_end;//末尾字母往前移
    m--;
    if(m>0) func(m,pa);///用if,否则死循环
}

温馨提示:内容为网友见解,仅供参考
无其他回答

@C语言大神,我这题为啥不能执行?求纠错(谢绝新代码)
number=max=min; \/\/ ---> 改为 max=min = number;错误3:number[0]=*max \/\/ ---> 改为number[9]=*max;

...段代码输出结果不正确?应该怎么改呢?求具体分析我的代码,谢谢...
1、大改了统计个数的代码块,修改为:思想:当arr[i]为1时,计num为1,循环遍历当前元素之后的元素arr[i+1],如果arr[i+1]也是1,则计数num+1,i也+1,再次while循环,此时就是相当于看arr[i+1+1],如果还是1,则再重复前面的步骤,直到出现0为止。出现0后,while循环结束,把本次统计得...

C语言的大神进来看看吧!
修改后代码:include <stdio.h>\/\/\/int main(){ int max(int a,int b,int c); int z,x,C,v; scanf("%d,%d,%d",&z,&x,&C);\/\/\/ v=max(z,x,C); printf("max=%d\\n",v);\/\/\/ return 0;}int max(int a,int b,int c){ int d; if(a>b&&a>...

C语言修改注册表代码求解析,龙年大吉!分不够再加!非诚勿扰,谢谢!
这是在注册表添加启动项的代码,注释如下 #include <stdio.h> #include <windows.h> int main(void) { char regname[]="Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run";\/\/注册表项目录 HKEY hkResult; \/\/注册表子项的一个句柄 int ret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&...

@C语言大神:这个代码怎么写?跪谢
bool IsSafePassWord(char *pw,int length1){ if(length1<6) { cout<< "密码位数不够6位"<<endl; return false; } int flag1=0,flag2=0,flag3=0,flag4=0; int i,j; char str[]="~!@#$%^&*()-="; int length2=strlen(str); for(i=0;...

一道c语言编程,求大神
看代码:include <stdio.h>#include <stdlib.h>\/\/ 定义比较函数int cmp (const void* a, const void* b){int i1 = *((int*)a);int i2 = *((int*)b);return i2 - i1;}\/\/ 用于输出整数数组void print_arr (int* p, int n){int i;for (i = 0; i < n; ++i){printf ...

...C语言为什么出现Segmentation fault,求解释并纠错(谢绝新代码...
你需要在循环赋值时限定i的值不能超过数组界限,比如将循环语句改成 for ( i=0;i<80 && *(str+i)>=0 && *(str+i)<=9;i++ )

一个简单的c语言程序代码(一个简单的c语言程序代码是什么)
求简单C语言程序代码!最简单的C语言代就是输出“helloWord”,通常是作为初学编程语言时的第一个程序代码。printf(%c,ch2);printf(\\n);}return0;}编程输出所有三位数中的素数。最简单的C语言代码【提问】由键盘任意输入1个4位数整数,分别输出其中的个位、十位、百位、千位。为了得到输入完成以后再...

请C高手进来,c语言改错考试题,谢谢^_^
而int const *(即const int *)表示指向静态整形的指针,也就是说ptr指向的值(*ptr)不可以变,但ptr可以变。答案已经出来了,修改方式可以把int *const ptr改为int const *ptr,把*ptr=8去掉,或者直接把ptr=&y去掉。2.第二个问题考察的是指针的移动。程序里错误之处在于while循环判断的条件...

求修改C语言代码,输出以空格分隔,最后一个数字之后无空格
可以在前边的输出后边加一个空格。判断是否到了最后一个,最后一个单独输出就可以了。

相似回答