问答题
改错题(20分)
【题目】
以下程序的功能是:根据字符串str中是否包含子串substr,决定如何将字符串str1插入到str的不同位置。插入方法是:如果str中包含子串substr,则将str1插入到str中首次出现的子串substr之后;否则,插入到str的尾部。
正确程序的输出如下:
原字符串:aabcd12345 子字符串:abcd 插入字符串:ABC
新字符串:aabcdABC12345
含有错误的源程序如下:
#include
#include
char *find(char *str,char *substr)
{
unsigned lent=strlen(str);
for(char *p1=str,*p2=substr;strlen(p1)>=len;p1++){
for(unsigned i=0;ilen)
return p1+len;
}
return 0;
}
char *insert(char *str,char *substr,char *str1)
{
char p=find(str,substr);
if(p)
strcat(str,str1);
else{
char *tmp=new char[strlen(str)+strlen(str1)+1];
strcpy(tmp,str1)
strcat(tmp,p);
strcpy(p,tmp);
delete []tmp;
}
return str;
}
void main()
{
char *str=new char[80],substr[]="abcd",str1[]="ABC";
strcpy(str,"aabcdl2345"); ’
cout<<"原字符串:"<
【正确答案】 unsigned len=strlen(str); str改为substr
if(i>len) 改为i>=len
char p=find(str,substr); char p改为char *p
if(p) p改为p==0或!p
【答案解析】