应用题 2.  程序test.c的功能是:把s字符串中的所有字符左移一个位置,串中的第一个字符移到最后。请考生编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT()把结果输出到out.dat文件中。
    例如:s字符串中原有内容为:Mn.123xyZ,则调用该函数后,结果为:n.123xyZM。
    请勿改动数据文件in.dat中的任何数据、主函数main()和输出函数readwriteDAT()的内容。
    #include <stdio.h>
    #include <string.h>
    #define  N 81    //定认宏变量N, 其值等于81
    void readwriteDAT();
    void chg(char *s)
    {
    }
    main ()
    {
    char a[ N ];
    printf("Enter a string:"); gets(a);
    printf("The original string is: "); puts(a);
    chg (a);
    printf ("The string after modified:");
    puts (a);
    readwriteDAT ();
    }
    /*从文件in.dat中读入字符串赋给字符串变量a,调用函数chg(a)对字符串按照题目的要求进行处理,并把处理结果写入到文件out.dat中*/
    void readwriteDAT()
    {
    int i;
    char a [N];
    FILE  *rf, *wf;
    rf=fopen("in.dat", "r");
    wf=fopen("out.dat", "w");
    for(i=0; i<10; i++)
    {
    fscanf (rf, "%s", a);    //从文件in.dat中读取一个字符串赋给字符串a
    chg (a);  //调用函数chg(a)对字符串a进行处理
    fprintf(wf, "%s\n", a);    //把处理结果写入到out.dat文件中
    }
    fclose(rf);
    fclose (wf);
    }
【正确答案】int i; char first, *p=s;
   first=*s;  //把字符串s的第一个字符赋给first
   /*把s字符串中的所有字符左移一个位置,串中的第一个字符移到最后*/
   for(i=0;  i<(int)  strlen(s)-1;  i++)
   *(p+i)=*(p+i+1);  //字符*(p+i+1)左移一位
   p[strlen(s)-1]=first;  //第一个字符移动到字符串s的最后位置
【答案解析】 所有字符左移一个位置,串中的第一个字符移到最后。
   ①定义循环变量i,字符变量first和字符指针变量p,并使p指向字符串s。
   ②把字符串s的第一个字符赋给。first变量保存起来。
   ③在for循环语句中,循环变量i从0开始,依次递增直到其值等于或大于(int)strlen(s)-1,把*(p+i+1)的值赋给*(p+i),实现把字符串s中的所有字符左移一个位置,循环结束后,把first的值赋给p[strlen(s)-1],即把字符串的首字符移动到字符串的最后位置上。