9 字符替换

#include<stdio.h>   
#include<string.h>   
int compare(char com[],char old[],int n);   
int main(){   
    int i,j,k;   
    char *p;   
    char original[101],old[11],neww[11],com[11];   
    gets(original);gets(old);gets(neww);   
   
    for(p=original;*p!='\0';){   
        for(;*p!=old[0]&&*p!='\0';p++)printf("%c",*p);   
        if(*p=='\0')break;   
        for(i=0;i<strlen(old);i++){   
            com[i]=*(p+i);   
        }   
        k=compare(com,old,strlen(old)); 
        if(k==strlen(old)){   
            for(j=0;j<strlen(neww);j++)printf("%c",neww[j]);   
            p+=k;   
        }   
        else{   
            for(j=0;j<k;j++,p++){   
                printf("%c",*p);   
            }   
        }   
    }      
    printf("\n");   
    return 0;   
}    
int compare(char com[],char old[],int n){   
    int i,r=0;   
    for(i=0;i<n;i++){   
        if(com[i]!=old[i])break;   
        r++; 
    }   
    return r;   
}  

本题关键在于字符串可能不止一处,采取了边打印边判断的方式,定义了一个比较原来字符串与要替换的字符串有几位一样的函数。

错误:

1 一开始定义的函数原来字符串与要替换的字符串一样返回1,否则0,但是7897895123    789   hhh  这类题目,判断了7897和7895不一样之后,指针直接+strlen(old),就从8开始比较了。

2 函数中形参为数组的格式不对。

3 for(;*p!=old[0]&&*p!='\0';p++)   

if(*p=='\0')break;

没有加&&*p!=0,导致最后一次循环一直不停止。

改后没有加if(*p=='\0')break;导致又在超出gets范围的乱码中进了一次函数,输出一些乱码。(当时的k还是strlen(old)).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值