应用题   程序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],即把字符串的首字符移动到字符串的最后位置上。