gpt4 book ai didi

c - 如果包含另一个句子字符串,则从中删除该单词字符串

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

我正在创建 2 个字符串。第一个是句子,第二个是单词。如果句子中包含该词,我们将其从句子中删除。

我试过几种方法,但如果单词在句子末尾,它总是会给出正确答案。

char sntc[150];
char word[30];

gets(sntc);
gets(word);

char temp[50];
int i=0;
int index=0;

while (i<strlen(sntc);) {
for(; sntc[i] != '\0'; i++) {
if(sntc[i] == ' ' || sntc[i] == '\0') {
break;
}
temp[index++]=sntc[i];
}
temp[index]='\0';
if (strcmp(temp, word) == 0) {
i++;
index=0;
continue;
} else {
printf("%s ", temp);
i++;
index=0;
}
}

对于这个输入:

merhaba dunyali nasilsin
dunyali

预期的输出是:

merhaba nasilsin

最佳答案

搜索单词并用你想保留的部分覆盖它:

char *found;
while((found=strstr(sntc,word))!=NULL)
strcpy(found,found+strlen(word));

当然,您可以将 strlen(word) 存储在变量中。
测试:https://ideone.com/BpLRe3

如果您担心宇宙的终结,请使用 memmove (也可以使用 fgets ,即使您不担心,这个也适用)。它们都需要一些工作,因为 fgets 还存储必须处理的换行符(否则 strstr 会查找类似 word\n 的内容,大概是徒劳的),而 memmove 移动内存,因此必须明确告知大小,并且必须包括空终止符:

char sntc[150];
char word[30];
char *found;
size_t wordlen;
fgets(sntc,sizeof(sntc),stdin);
fgets(word,sizeof(word),stdin);
wordlen=strlen(word)-1;
word[wordlen]=0;
while((found=strstr(sntc,word))!=NULL)
memmove(found,found+wordlen,strlen(found+wordlen)+1);
printf("%s",sntc);

测试中仍然使用空格技巧:https://ideone.com/hvZAtm (我已经将“_dunyali”放入输入的第二行,只有一个空格 - 这里的格式化程序显然吃掉了那个空格,这就是为什么它现在标有下划线),但实际上-life 你将不得不注意单词周围的空格(其中一个通常可以删除)和标点符号(之后可能需要也可能不需要)。

关于c - 如果包含另一个句子字符串,则从中删除该单词字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56104042/

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