指针的小作用

指针妙用(话不多说,上题)

输入一行原文本(可以包含中文、英文、标点符号),再输入待修改的子串以及修改后的子串(不包含空串或空白字符),对这行原文本执行查找和替换操作,输出查找到子串的次数,将查找到的子串全部替换成为修改后的子串,输出替换后的文本。
看似一道寻常的字符串替换,若是没有指针怕是要动点脑筋。
指针做法

#include<stdio.h>
#include<string.h>

void solve(char *a, char *b, char *c){
 char *p;
 while((p=strstr(a,b))!=NULL){
  int len=p-a;
  int len1=strlen(a),len2=strlen(b),len3=strlen(c);
  char temp[10005];
  strcpy(temp,a+len+len2);
  for(int i=0; i<len3; i++)a[len+i]=c[i];
  strcpy(a+len+len3,temp);
 }
}


int main(){
    char a[10005],b[205],c[205];
    while(gets(a)){
        scanf("%s%s",b,c);
        getchar();
        solve(a,b,c);
        printf("%s\n",a);
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
    }
    return 0;
}

非指针做法

#include<stdio.h>
#include<string.h>
#define N 10050

void replace(char s[], char x[], char y[]){
 char r[1000]={'\0'};
 int m,a,b=0,k=strlen(s),p=0,c=strlen(x),o=strlen(y);
 s[k]=' ';s[k+1]='\0';
 for(m=0;s[m]!='\0';m++,b=0){
  a=m;
  while(s[a]==x[b]){	//寻找是否有相同的地方//
   a++;b++;
  }
  if(b==c){
   strcat(r,y);		//将要替换的字符串至于r末尾//
   p+=o;		//r跨越一个要替换字符串的长度//
   m=m+c-1;		//原字符串跨越一个目标字符串的长度继续寻找//
  }
  else{
   r[p++]=s[m];		//将目标字符串之前的字符存放于r中//
  }
 }
 strcpy(s,r);	
}

int main(){
char s[3*N+1], x[N+1], y[N+1];
 while(gets(s)){
     scanf("%s%s",x,y);
     getchar();
     replace(s,x,y);
     printf("%s\n",s);
 }
 return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值