gpt4 book ai didi

c - 替换 C 中出现的每个单词

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:43 25 4
gpt4 key购买 nike

所以,我必须替换一个较大字符串中出现的每个单词,我有一个函数可以这样做,如下所示:

void replace(char *sir, char *word1, char *word2) {
char *buffer;
buffer = calloc(LMAX, sizeof(char));
char *insert_point = &buffer[0];
char *tmp = sir;
int l1 = strlen(word1);
int l2 = strlen(word2);
while (1) {
char *p = strstr(tmp, word1);
if (p == NULL) {
strcpy( insert_point, tmp );
break;
}
memcpy(insert_point, tmp, p - tmp);
insert_point += p - tmp;
memcpy(insert_point, word2, l2);
insert_point += l2;
tmp = p + l1;
}
strcpy(sir, buffer);
free(buffer);
}

这行得通,但它也替换了子字符串,而不仅仅是单词。例如,如果我有:“This is my string ing”并且我想用“watermelon”替换“ing”,我会得到这样的结果:“This is my strwatermelon watermelon”。所以,我的问题是如何让我的程序检查他要替换的内容是否是一个词?

最佳答案

您需要检查要替换的单词前后是否有空格。有特殊条件:

  • 对于第一个词,前一个词不存在。
  • 上一个词,下一个词不存在。

我已经在你的代码中添加了这个逻辑:

void replace(char *sir, char *word1, char *word2)
{
char *buffer;
buffer = calloc( 100, sizeof(char) );
char *insert_point = &buffer[0];
char *tmp = sir;
int l1 = strlen( word1 );
int l2 = strlen( word2 );
while(1)
{
char *p = strstr( tmp, word1 );
if( p == NULL )
{
strcpy( insert_point, tmp );
break;
}
memcpy( insert_point, tmp, p-tmp );
insert_point += p-tmp;

if ( (p == sir || isspace((unsigned char)p[-1])) &&
(isspace((unsigned char)p[l1]) || p[l1] == 0) ) {
memcpy( insert_point, word2, l2 );
insert_point += l2;
}
else {
memcpy(insert_point, word1, l1);
insert_point += l1;
}
tmp = p+l1;
}
strcpy( sir, buffer );
free( buffer );
}

关于c - 替换 C 中出现的每个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34184127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com