问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言指针函数替换字符

发布网友 发布时间:2022-05-24 12:07

我来回答

5个回答

热心网友 时间:2023-10-12 18:50

char
*replace(char
*source,
char
*sub,
char
*rep)
{
char
*result;
/*pc1
是复制到结果result扫描指针*/
/*pc2
是扫描
source
辅助指针*/
/*pc3
寻找子串时,为检查变化中source是否和子串相等,是指向sub扫描指针
*/
/*找到匹配后,为了复制到结果串,是指向rep扫描指针*/
char
*pc1,
*pc2,
*pc3;
int
isource,
isub,
irep;
isub
=
strlen(sub);
/*对比串长度*/
irep
=
strlen(rep);
/*替换串长度*/
isource=
strlen(source);
/*源串长度*/
if(NULL==*sub)
return
strp(source);
/*申请结果串需要空间*/
result
=
(char
*)malloc(((irep>isub)?(float)strlen(source)/isub*irep+1:isource)*sizeof(char));
pc1
=
result;
/*为pc1依次复制结果串每个字节作准备*/
while(*source
!=
NULL)
{
/*为检查source和sub是否相等作准备,为pc2,pc3
赋初值*/
pc2
=
source;
pc3
=
sub;
/*
出循环(任)条件是:
*
*pc2
不等于
*pc3
(和子串不相等)
*
pc2
到源串结尾
*
pc3
到源串结尾
(此时,检查了全部子串,source处和sub相等)
*****************************************************/
while(*pc2==*pc3
&&
*pc3
!=
NULL
&&
*pc2
!=
NULL)
pc2++,
pc3;
/*
如果找到了子串,进行以下处理工作*/
if(NULL==*pc3)
{
pc3
=
rep;
/*将替代串追加到结果串*/
while(*pc3
!=
NULL)
*pc1
=
*pc3;
pc2--;
source
=
pc2;
/*
检查
source和sub相等循环结束后
*
pc2
对应位置是在
sub
中串结束符处该是源串中下个位置
*

source
指向其前面个
***************************************************/
}
/*如果没找到子串,下面复制source所指字节到结果串*/
*pc1
=
*source;
source;
/*
将source向后移个*/
}
*pc1
=
NULL;
result;
}

热心网友 时间:2023-10-12 18:50

下面的程序可以把句子中所有的an都换成a。

#include<stdio.h>
main()
{
char a[]="I am an boy",*p1,*p2;
p1=a;
for(;*p1!='\0';p1++) //必须要设置条件,遇到字符串结束符就停止循环
{
if(*p1==' ' && *(p1+1)=='a' && *(p1+2)=='n' && (*(p1+3)==' ' || *(p1+3)=='\0')) //an一般不会出现在句首,因为句首字母要大写,所以此处只考虑单独的单词an。当然an也有可能出现在句末。
{//下面几句是把an换成a,实际上是把an后面的字符前移一位,覆盖掉n
p2=p1+2;;
while(*p2)
{
*p2=*(p2+1);
p2++;
}
}
}
printf("%s\n",a); //输出字符串要用%s
}追问while(*p2)

什么意思?

追答就是while(*p2!='\0'),即当p2没有指向字符串结束符时

热心网友 时间:2023-10-12 18:51

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

char * replace(char *str, char *str1, char *str2, char *strretu)
{
char *str_temp = str;
char *str1_temp = str1;
char *str2_temp = str2;
char *strretu_temp = NULL;

unsigned long char_size = (unsigned long)sizeof(char);
/*计算字符长度*/
unsigned long i,j,rep_acc = 0;
unsigned long str_len = strlen(str);
unsigned long str1_len = strlen(str1);
unsigned long str2_len = strlen(str2);

/*首先找出Str里有几个地方要被替换的*/
for(; str_temp - str < str_len; )
{
for(i = 0; i < str1_len; i++)
{
if(*str_temp++ != *str1_temp++)
{
str1_temp = str1;
break;
}
else
{
if(i == str1_len - 1)
{
str1_temp = str1;
rep_acc++;
}
}
}
}
str1_temp = str1;
str_temp = str;

/*分配所需内存*/
strretu = strretu_temp = malloc(((str_len - str1_len * rep_acc) + str2_len * rep_acc + 1) * char_size);
/*替换*/
for(; str_temp - str < str_len; )
{

for(i = 0; i < str1_len; i++)
{
*strretu_temp++ = *str_temp;

if(*str_temp++ != *str1_temp++)
{
str1_temp = str1;
break;
}
else
{

if(i == str1_len - 1)
{
strretu_temp = strretu_temp - str1_len;

for(i = 0; i < str2_len; i++)
{
*strretu_temp++ = *str2_temp++;
}
str2_temp = str2;
str1_temp = str1;
}
}
}
}
*strretu_temp = '\0';
str1_temp = str1;
str_temp = str;
str2_temp = str2;

return(strretu);
}

int main(void)
{

char *str = "I intinINTterrificinuIntstudentninth";
char *str1 = “int";
char *str2 ="FLOAT";

char *strretu = NULL;

printf("str = %s\n", str);
printf("str1 = %s\n", str1);
printf("str2 = %s\n", str2);

strretu = replace(str, str1, str2, strretu);

printf("strretu = %s\n", strretu);

getch();

free(strretu);
return 0;
}

热心网友 时间:2023-10-12 18:51

#include<stdio.h>
int main()
{
char a[]="i am an boy";
char* b=NULL;
char* c=NULL;
b=a;
while(*b != '\0')
{
while(*b == ' ')
b++;
if(*b =='a')
{
if(*(b+1)=='n')
{
if(*(b+2)==' ')
{
c=b+1;
while( *c != '\0')
{
*c=*(c+1);
++c;
}
}
}
}
while(*b != ' '&& *b!='\0')
++b;
}
printf("%s\n",a);
}
觉得对你有帮助请采纳 谢谢

热心网友 时间:2023-10-12 18:52

字符串替换,需要两层循环判断
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
此去经年两相忘,是出自哪里? 李续宾在安徽“三河战败”殒命主要原因? 三河镇之战的结果 钉钉系统是什么 企业用车、差旅等费用去向不明,财务如何通过滴滴企业版实现企业出行费用... 困扰间采的4大差旅管理难题,该怎么做? 123soul的I'm yours的MP3 清华管理学系列英文版教材:管理学内容简介 入党日期填哪个 女人停经后纯无“性"生活,该咋办 C语言作业:用子函数replace()将用户输入的字符串中的所有字符b&#47;B都替换为c&#47;C,并返回总共替换字符的个数 同花顺软件怎么在k线上设置不零的指标布林通道指标? 我的配置可不可以玩绝地求生大逃杀 生辰八字五行起名男孩、父亲姓杨,生于2012年10月10日《阳历》想找高人给看看五行缺啥,起个名字。 为什么备份sl400系统只备份了2张盘 系统备份默认怎么有两份几乎一样的?D\E盘各一份 如果同一个视频删除再恢复,百度网盘会备份两份吗? 手机照片备份到百度云网盘,为什么只能备份一个相册?备份第二个就没反应了,我有几个相册,怎么备份啊? 百度网盘保存像片为什么是两份甚至三份? 百度网盘为什么使用一健上传都是双份? 人死后肉身几个月就腐烂了? 人死了一般什么时候开始腐烂 带耳机时,只一格声音还是觉得声音太大怎么办呢 耳机声音太大 让耳朵流油怎么 工信部发文打造可信区块链创新协同平台? 听说金窝窝的金链通过了可信区块链的首次测评了?是真的吗? 怎么样查询银行卡号码 请问你一下买那针式打印机开发票,买12针的好还是24针 佳能3800 打印机出现代码12 佳能打印机交替闪12下 注册电子邮箱时用户名只能包含_,英文字母,数字怎样填写 C语言char*replace()什么意思啊 c语言 编写replaceWord函数 求助各位大佬,一个C语言问题 c语言中完成一个自定义函数,替换指定字符串中的对应字符的代码 竹叶水对身体有好处吗? 喝竹叶水有什么好处和坏处 惠普1000喷墨打印机,用最佳模式打得很慢,但清晰。用普通模式的话打得非常快,但非常模糊,还有短线现象 惠普hp deskjet 1000的后续型号打印机 hp1000打印机 和HP1050 哪个好些,具体在打印上面哪个好。 hp1000打印机常见的问题有那些?是属于什么打印机,用什么耗材型号?驱动下载地址? 惠普(HP)惠众系列套装 Deskjet 1000 彩色喷墨打印机+802彩色墨盒 惠普hp1000 HP Deskjet 1000 家用彩色喷墨HP打印机 /如何把iPAD里的照片复制到电脑里 歌尔股份股票最新行情走势?歌尔股份最新分析视频?002241歌尔股份今天开盘价? 歌尔股份002241股票目标价?歌尔股份明天行情走势?歌尔股份股价为何上不去? 歌尔股份股是什么概念股?歌尔股份上市价多少钱?002241歌尔股份股票走势? 002241歌尔股份目标价?歌尔股份股票历史价格数据?歌尔股份股今天什么价? 歌尔股份股价最高价?002241歌尔股份股票行情牛叉诊断?歌尔股份流入资金大为何还是不涨? 翡翠手镯买贵太多了,不知道可不可以找店家退?