下列程序的功能是:把s字符串中所有的字符左移一个位置,串中的第一个字符移到最后。请编制函数chg(char*s)实现程序要求,最后调用函数readwriteDat()把结果输出到out63.dat文件中。 例如:s字符串中原有内容为Mn,123xyZ

admin2010-01-11  30

问题 下列程序的功能是:把s字符串中所有的字符左移一个位置,串中的第一个字符移到最后。请编制函数chg(char*s)实现程序要求,最后调用函数readwriteDat()把结果输出到out63.dat文件中。
   例如:s字符串中原有内容为Mn,123xyZ,则调用该函数后,结果为n,123xyZM。
   注意:部分源程序已给出。
   请勿改动主函数main()和输入输出函数IeadwriteDAT()的内容。
   试题程序:
    #include<conio. h>
    #include<stdio, h>
    #define N 81
    void readwriteDAT ( );
    void chg(char *s)
   {

   }
    main ( )
   {
          char a [N];
          clrscr ( );
          printf("Enter a string :");
          gets (a);
          printf("The original string is :");
          puts (a);
          chg (a);
          printf("The string after modified :");
          puts (a);
          readwriteDAT ( );
    }
    void readwriteDAT ( )
    {
          int i;
          char a [N];
          unsigned char *p;
          FILE *rf,*wf;
          rf=fopen ( "in63. dar", "r" );
          wf= fopen ( "out 63. dat" , "w" );
          for (i=0; i<10; i++)
          {   
                fgets(a,80,rf);
                p=strchr (a, ’\n’ );
                if (p)  *p=0;
                chg (a);
                fprintf (wf, "%s\n" ,a);
        }
          fclose (rf);
          fclose (wf);
        }

选项

答案void chg(char *s) { int i, strl; char ch; strl=strlen (s); /*求字符串的长度*/ ch=*s; /*将第一个字符暂赋给ch*/ for (i=0; i<strl-1; i++) /*将字符依次左移*/ *(s+i)=*(s+i+l); * (s+strl-1)=ch; /*将第一个字符移到最后*/ }

解析 本题考查的知识点如下:
   (1)数组中元素的移动。
   (2)指针的使用。
   我们可以使用一个循环实现数组中所有字符元素的左移。这里要注意的是第1个字符要移至最后1个字符处,所以首先要将第1个字符保存。在移动时,要从左到右依次移动,否则,左侧的字符会在移动前被其右侧的字符覆盖。在这里使用了指针,初始时,指针指向数组的第1个元素,随着地址的增加指针指向数组后面的元素。例如,若地址加2,则指向数组的第3个元素。
转载请注明原文地址:https://jikaoti.com/ti/Arc7FFFM
0

最新回复(0)