下列给定的程序中,函数fun()的功能是;将s所指字符串中出现的n所指字符串全部替换成t2所指字符串,所形成的新的字符串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如:当s所指字符串中所指的内容为 abcdabfab,t1所指字符串中

admin2010-05-05  35

问题 下列给定的程序中,函数fun()的功能是;将s所指字符串中出现的n所指字符串全部替换成t2所指字符串,所形成的新的字符串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如:当s所指字符串中所指的内容为 abcdabfab,t1所指字符串中的内容为ab,t2所指字符串中的内容为99时,结果在w所指的数组中的内容应为99cd99f99。
   请改正程序中的错误,使它能得出正确的结果。
   注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
   试题程序:
       #include  <conio.h>
       #include  <stdio.h>
       #include  <string.h>
       /*************found**************/
       int fun (char *s, char *t1, char *t2, char *w)
       {
        int  i;  char *p,*r,*a;
        strcpy(w,s);
        while (*w)
           {p=w;  r=t1;
       /*************found**************/
            while (r)
                if (*r= =*p) {r++;p++;}
                else break;
            if (*r= =’\0’)
              {a=w;  r=t2;
       /*************found**************/
               while  (*r){*a=*r;a++;r++}
               w+=strlen(t2);
              }
            else w++;
           }
       }

       main()
       {char s[100],t1[100],t2[100],w[100];
        clrscr();
        printf("\nPlease enter string  S: ");
               scanf("%s",s);
        printf("\nPleaseentersubstring t1: ");
               scanf ("%s", t1);
        printf("\nPlease enter substring t2: ");
               scanf ("%s",t2);
        if (strlen(t1)= =strlen(t2))
          {
          fun (s,t1,t2,w);
          printf("\nThe result is : %s\n",w);
          }
        else printf("Error : strlen(t2)\n");
       }

选项

答案(1)错误:int fun(char *s,char *t1,char *t2, char *w) 正确:void fun(char *s,char *t1,char *t2, char *w) (2) 错误:while(r) 正确:while(*r) (3) 错误:r++ 正确:r++;

解析 在int fun(char *s,char *t1,char *t2, char *w)中,用int型定义指针数组。ANSI标准要求动态分配系统返回void指针。 void指针具有一般性,它们可以指向任何类型的数据。但目前绝大多数C编译所提供的这类函数都返回char指针。无论以上两种情况的哪一种,都需要强制类型转换的方法把char指针转换成所需的类型。该程序段应该是void fun(char *s,char *t1, char *t2, char *w),另外,while(r)和r++都是简单的逻辑和语法错误,只要加强了C语言的基础,这样的错误明显是“送分”的。
转载请注明原文地址:https://jikaoti.com/ti/eKkiFFFM
0

随机试题
最新回复(0)