C语言查找替换字符
定义一个函数replace(),其中包含三个形参:两个是字符型,一个是字符串型。该函数返回一个整数,函数的功能是在字符串中查找第一个字符,如果找到,用第二个字符替换该字符...
定义一个函数replace(),其中包含三个形参:两个是字符型,一个是字符串型。该函数返回一个整数,函数的功能是在字符串中查找第一个字符,如果找到,用第二个字符替换该字符,并将替换的次数作为返回值,编写主函数调用该函数,要求在主函数中动态分配一组空间,将字符串输入该动态空间。
展开
展开全部
#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;
}
展开全部
#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);
}
#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);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询