P099 移动字符串中的内容 ★★

03-程序设计题 软件121, 唐鼎威 1277浏览

所属年份:2011.9;2012.3;
请编写函数fun,其功能是:移动字符串中的内容,移动的规则是把第1~m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有的内容为”ABCDEFGHIJK”,m的值为3,移动后,字符串中的内容应该是”DEFGHIJKABC”。

#include <stdio.h>
#include <string.h>
#define   N    80
void fun (char  *w,int  m)
{
  
}
void main()
{
  FILE *wf;
  char  a[N]= "ABCDEFGHIJK",b[N]= "ABCDEFGHIJK";
  int  m;
  printf("The origina string :\n");
  puts(a);
  printf("\n\nEnter  m: ");
  scanf("%d",&m);
  fun(a,m);
  printf("\nThe string after moving :\n");
  puts(a);
  printf("\n\n");
/******************************/
  wf=fopen("out.dat","w");
  fun(b,3);
  fprintf(wf,"%s",b);
  fclose(wf);
/*****************************/
}

【解题思路】
本题应采用”循环左移”的算法,多层循环用于控制移动的字符的个数,即需进行多少次循环,内嵌循环的作用是将从第2个字符以后的每个字符依次前移一个位置,最后将第1个字符放到最后一个字符中。

【参考答案】

void fun (char  *w,int  m)
{
  int i,j;
  char t;
  for(i=1;i<=m;i++)           /*进行m次的循环左移*/
    {t=w[0];
     for(j=1;w[j]!='\0';j++)  /*从第2个字符开始以后的每个字符都依次前移一个字符*/
         w[j-1]=w[j];
     w[j-1]=t;                /*将第1个字符放到最后一个字符中*/
    }
}