怎样从一个字符串里面找到特定的单词,然后用别的单词取代?用c语言实现!!!

tohy 2003-06-01 04:28:21
谢谢
...全文
545 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
windbells 2003-06-02
  • 打赏
  • 举报
回复
给你个建议
1、比较查找字符串和替换字符串的长度,如果替换字符串的长度小于查找字符串的话
执行第一便扫描,匹配算法可以采用改进后的Boyer-Moore-Horspool算法,要比strstr()函数快上5~7倍,找到后直接替换,多出的长度部分用特殊字符填充,替换完成后,如果前一步有发现则执行最后一边扫描,用指针交替移动的方法,遇到特殊字符,把后面的向前填充.
2、如果相等的话,少了前一步的最后扫描工作。
3、如果长度比要查找的大,第一遍扫描记下找到的个数,位置,然后计算出替换后字符串的总长,然后申请需要的空间,根据找到的位置构造新的字符串。原有的字符串空间释放。
(参数传递可以采用引用指针方式,返回时直接替换掉源字符串指针值,防止访问源字符串指针报错)
arfi 2003-06-02
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>

void back(char *str, int len)
{
char *p = str;

while(*p++);
for(;p>=str;p--)
*(p+len) = *p;
}

char *replace(char *sour, char *findstr, char *replstr)
{
char *p;
int flen, rlen;

flen = strlen(findstr);
rlen = strlen(replstr);
while(1)
{
p = strstr(sour, findstr);
if(p == NULL)
break;
if(flen > rlen)
{
strcpy(p, replstr);
p += rlen;
strcpy(p, p+(flen-rlen));
}
else if(flen < rlen)
{
back(p+flen, rlen-flen);
memcpy(p, replstr, rlen);
p += rlen;
}
else
{
memcpy(p, replstr, rlen);
p += rlen;
}
}

return sour;
}

void main(void)
{
char sour[80] = "hello world, who are you?";

replace(sour, "world", "earth");
printf("%s\n", sour);
}
tohy 2003-06-02
  • 打赏
  • 举报
回复
关注!
witcheese 2003-06-02
  • 打赏
  • 举报
回复
1
wahao 2003-06-01
  • 打赏
  • 举报
回复
我为了它忙了一个星期了
可是……
我好伤心
tohy 2003-06-01
  • 打赏
  • 举报
回复
好象不行也!!
TripleX 2003-06-01
  • 打赏
  • 举报
回复
用正则表达式库吧 可以着很多意想不到的字符串处理 :)
hillyee 2003-06-01
  • 打赏
  • 举报
回复
关注
windbells 2003-06-01
  • 打赏
  • 举报
回复
source为源字符串,findstr为需要查找被替换的字符,replacestr为替换字符
char *replace(char *source,char *findstr,char *replacestr)
{
char *p=strstr(source,findstr);
int len;
int flen;
int rlen;
if(p)
{
int pos=p-source;
flen=strlen(findstr);
rlen=strlen(replacestr);
if(flen>=rlen)
{
memcpy(&source[pos],replacestr,rlen);
if(flen>rlen)
{
strcpy(&source[pos+rlen],&source[pos+flen]);
}
return source;
}
else
{
int len = strlen(source);
char *szStr = new char[len+rlen-flen+1];
memset(szStr,0,len+rlen-flen+1);
memcpy(szStr,source,pos);
memcpy(&szStr[pos],replacestr,rlen);
strcat(szStr,p+flen);
delete []source;
return szStr;
}
}
return NULL;
}
zalyer 2003-06-01
  • 打赏
  • 举报
回复
c语言有一个函数可以搜索子串,并返回它的位置,然后替换就可以了。
一、硬件 在快速发展的物联网与智能设备时代,RISC-V作为一种先进的开源指令集架构,正逐步成 为业界的焦点。 中电港萤火工场推出基于兆易创新(GigaDevice)GD32VW553——一款RISC-V内核的32 位MCU的开源硬件板GD32VW553-IOT-V2。该板集成了主控芯片卓越的无线连接能力(集成Wi-Fi 6 与BLE5.2)、强大的性能与能效比以及丰富的外设接口,可享受到开源社区带来的丰富资源 和便利,极大地方便了开发者的快速部署和应用创新。 全新的设计针对旧款的开发痛点进行了系统性优化: Type-C口升级:集成串口功能,简化调试与程序下载流程,提升开发便捷性 新增开关:增设用户可自定义按键及指示灯,拓展交互控制与状态显示功能 板面布局优化:背面增加引脚丝印,正面仅保留关键器件丝印,布局清晰及信息聚焦 FLASH焊接位:移至背面,减少焊接风险,增加开源二次开发的灵活性 BOOT开关优化:升级为拔码式设计,简化操作逻辑,提升切换效率 稳固性增强:板厚增至1mm,提升了整体结构强度与抗变形能力 联合兆易创新打造GD32无线生态专区,整合产品动态、开源分享、方案应用、资料下载等,iceasy 二、MLX90614温度传感器 MLX90614 是一款集成红外热电堆传感器和信号处理芯片的非接触式温度计。它采用了先进的红外感应技术,可以对目标物体进行高精度和高分辨率的温度测量,适用于各种工业、汽车等应用。 特性和优点 MLX90614 具有以下主要特性和优点: 高精度和高分辨率:由于集成了低噪声放大器、17 位模数转换器和强大的数字信号处理单元,使得温度计具备高精度和高分辨率1。 宽温度范围:环境温度范围为 -40℃ 至 125℃,物体温度范围为 -70℃ 至 382.2℃1。 低功耗:功耗仅为 1mA 左右,适合于电池供电的场合2
源码链接: https://pan.quark.cn/s/1470f27e49f3 标题“移动号码库”所标识的是一个汇集了中国各地移动通信公司手机号码信息的资源,这些信息可用于数据分析、市场推广或电信行业研究等领域。描述中提及“依据中国地区移动电话编码”,这表明数据库内的号码是依照中国的电话区号分配制度进行排列的,中国的手机号码一般由11位数字构成,其中前三位象征运营商(例如中国移动的139、138等,中国联通的130、131等),随后的数字则代表用户所在地的区号。在所提供的压缩文件中:1. **手机号码归属地采集.exe**:这是一个可执行文件,或许是一种用于成批获取或查询手机号码归属信息的工具。通过键入手机号码,该程序能够输出该号码所属的省、市以及运营商的详情,从而使用户能够辨识号码的来源。2. **Data.mdb**:这代表一个Microsoft Access的数据库文件,极有可能包含了移动号码库的关键数据。Access数据库能够高效地管理和整理大量结构化的数据,诸如手机号码、区号、城市详情等。用户可以通过设定特定的查询来检索或分析这些数据。3. **MSCOMCTL.OCX**:这是一个ActiveX组件,频繁应用于早期的Windows软件中,提供各类用户界面组件。在此情境下,它可能是手机号码归属地采集程序的一部分,用于优化程序的界面功能,比如列表视图或表格控件,用于展示和操作手机号码数据。4. **Count.txt**:这是一个文本文档,通常用来记录特定的统计信息,如数据库中的手机号码总数、不同地区号码的分布状况等。用户可以通过查阅这个文档迅速掌握号码库的大致容量。综合上述内容,我们可以推断这个压缩文件是一个用于处理和分析中国移动电话号码数据的...

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧