社区
C语言
帖子详情
怎样从一个字符串里面找到特定的单词,然后用别的单词取代?用c语言实现!!!
tohy
2003-06-01 04:28:21
谢谢
...全文
560
10
打赏
收藏
怎样从一个字符串里面找到特定的单词,然后用别的单词取代?用c语言实现!!!
谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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语言有一个函数可以搜索子串,并返回它的位置,然后替换就可以了。
跟我一起学makefile
别人的东西,觉得挺好就传一下.关于makefile的用法规则。很有用。
C语言
里
字符串
的解析
C语言
里
字符串
的解析 根据给定的
字符串
,按照一定规则解析
字符串
,卡住好几次,这次做个笔记,以供参考函数名称: strtok 函数原型: char *strtok(char *s1, const char *s2) 函数功能: 分解s1
字符串
为用
特定
分隔符分隔的多个
字符串
(一般用于将英文句分解为
单词
) 函数返回:
字符串
s1...
c语言
字符串
枚举类型,
C语言
入门 — 枚举类型
1、
C语言
入门 — 枚举类型,枚举类型的关键字是enum, enum是用来定义一组整型数值,其实定义模型如下:enum {常数名称1 = 0, //起始值取0,这里的值可以为0,正数,负数。常数名称2 //常数名称,只能取英文,数字以及下划线, 起始字符必须是英文。常数名称3常数名称4}名称; //名称,只能取英文,数字以及下划线, 起始字符必须是英文。枚举类型主要是为了方便代...
C语言
字符串
操作总结大全
1)
字符串
操作 strcpy(p, p1) 复制
字符串
strncpy(p, p1, n) 复制指定长度
字符串
strcat(p, p1) 附加
字符串
strncat(p, p1, n) 附加指定长度
字符串
strlen(p) 取
字符串
长度 strcmp(p, p1) 比较
字符串
strcasecmp忽略大小写比较
字符串
strncmp(p, p1, n) 比较指定长度
C语言
70,036
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章