C语言查找替换字符

定义一个函数replace(),其中包含三个形参:两个是字符型,一个是字符串型。该函数返回一个整数,函数的功能是在字符串中查找第一个字符,如果找到,用第二个字符替换该字符... 定义一个函数replace(),其中包含三个形参:两个是字符型,一个是字符串型。该函数返回一个整数,函数的功能是在字符串中查找第一个字符,如果找到,用第二个字符替换该字符,并将替换的次数作为返回值,编写主函数调用该函数,要求在主函数中动态分配一组空间,将字符串输入该动态空间。 展开
 我来答
一骑当后
推荐于2016-06-14 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40299 获赞数:306419
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部
 #include<stdio.h>
  #include<conio.h>
  #include<string.h>
  #include<stdlib.h>
  void Substitute(char *pInput, char *pOutput, char *pSrc, char *pDst)
  {
  char    *pi, *po, *p;
  int     nSrcLen, nDstLen, nLen;
  // 指向输入字符串的游动指针.
  pi = pInput;
  // 指向输出字符串的游动指针.
  po = pOutput;
  // 计算被替换串和替换串的长度.
  nSrcLen = strlen(pSrc);
  nDstLen = strlen(pDst);
  // 查找pi指向字符串中第一次出现替换串的位置,并返回指针(找不到则返回null).
  p = strstr(pi, pSrc);
  if(p)
  {
  // 找到.
  while(p)
  {
  //计算被替换串前边字符串的长度.
  nLen = (int)(p - pi);
  // 复制到输出字符串.
  memcpy(po, pi, nLen);
  memcpy(po + nLen, pDst, nDstLen);
  // 跳过被替换串.
  pi = p + nSrcLen;
  // 调整指向输出串的指针位置.
  po = po + nLen + nDstLen;
  // 继续查找.
  p = strstr(pi, pSrc);
  }
  // 复制剩余字符串.
  strcpy(po, pi);
  }
  else
  {
  // 没有找到则原样复制.
  strcpy(po, pi);
  }
  }
  int main(int ac, char *av[])
  {
  if (ac!=5) {
  printf("程序名 要操作的文件 新文件 查找的字符串 替换的字符串\n");
  printf("示例:test.exe 1.txt 2.txt hello love\n");
  return 0;
  }
  const int MAXSIZES = 100;
  FILE *fpSrc,*fpDes;
  char filename1[20]="1.txt";
  char filename2[20]="2.txt";
  //要求查找的字符串,替换的字符串;
  char ps[]="hello";
  char pd[]="love";
  //求取所查找和替换的字符串的长度;
  int len_src=strlen(av[3]);
  int len_des=strlen(av[4]);
  //定义存储字符串缓冲区;很奇怪的一点是,fgets函数不能将字符串写入动态分配的内存中
  /*char* Src_buf=(char*)(sizeof(char)*MAXSIZES);
  char* Cpy_buf=(char*)(sizeof(char)*MAXSIZES);
  char* Des_buf=(char*)(sizeof(char)*MAXSIZES);*/
  char Src_buf[MAXSIZES] = {0};
  char Cpy_buf[MAXSIZES] = {0};
  char Des_buf[MAXSIZES] = {0};
  //打开文件
  if((fpSrc=fopen(av[1],"r+"))==NULL)
  {
  printf("fail to open the file1 !\n");
  exit(1);
  }
  if((fpDes=fopen(av[2],"a+"))==NULL)
  {
  printf("fail to open the file2 !\n");
  exit(1);
  }
  //进行循环读取
  while(!feof(fpSrc))//判断文件是否已结束;!feof(fpSrc)
  {
  fgets(Src_buf,MAXSIZES,fpSrc);
  Substitute(Src_buf,Des_buf,av[3],av[4]);
  fputs(Des_buf,fpDes);
  printf("%s",Des_buf);
  }
  fclose(fpSrc);
  fclose(fpDes);
  system("pause");
  return 0;
  }

crazy365966834
推荐于2016-06-09 · TA获得超过174个赞
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:163万
展开全部
#include<stdio.h>
#include<string.h>
#define MAX 1000
int chrn (char c1, char c2, char s[])
{
int n=0;
char *p=s;
for(;*p!='\0';p++)//*s=空,退出
{
if(*p==c1)//有c,n++
{
*p=c2;
n++;
}
}
return n;
}
void main()
{
char str[MAX], c1, c2;
int n;
printf("input the string :\n");
gets(str);
printf("input c1:\n");
scanf("%c",&c1);getchar();
printf("input c2:\n");
scanf("%c",&c2);getchar();
n=chrn(c1,c2,str);
puts(str);
printf("%d\n",n);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
o_hi_123
2009-05-29 · 超过23用户采纳过TA的回答
知道答主
回答量:47
采纳率:100%
帮助的人:35.9万
展开全部
#include <stdio.h>

int replace(char,char,char[]);

void main()
{
char ch1,ch2,*str;
int size,result;
scanf("%c%*c%c%d",&ch1,&ch2,&size);
fflush(stdin);
str=new char[size];
scanf("%s",str);

result=replace(ch1,ch2,str);
printf("string=%s,count=%d\n",str,result);
}

int replace(char a,char b,char c[])
{
int count=0;
for(int i=0;c[i]!='\0';i++)
{
if(c[i]==a)
{
c[i]=b;
count++;
break;
}
}
return count;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式