c - 从给定的字符串中删除一个单词
问题描述
作为作业的一部分,我一直在尝试编写代码以从输入的字符串中删除一个单词。但问题是输出的“修改过的”字符串从未真正被修改过,它实际上总是输出输入的字符串。我是字符串新手,所以我对 string.h 库函数的工作方式没有完全了解。
#include<stdio.h>
#include<string.h>
int main(void)
{
char str[60], strtemp[60], word[10], * token;
printf("Enter the sentence: ");
gets_s(str);
printf("Enter the word to be deleted: ");
gets_s(word);
int i = 0;
token = strtok(str, " ");
while (token != NULL) {
if (!i && token != word)
strcpy(strtemp, token);
else if (token == word) {
token = strtok(NULL, " ");
continue;
}
else {
strcat(strtemp, " ");
strcat(strtemp, token);
}
token = strtok(NULL, " ");
i++;
}
strcpy(str, strtemp);
printf("Modified string: %s \n", str);
}
解决方案
添加以下内容:
char *strremove(char *str, const char *sub) {
size_t len = strlen(sub);
if (len > 0) {
char *p = str;
while ((p = strstr(p, sub)) != NULL) {
memmove(p, p + len, strlen(p + len) + 1);
}
}
return str;
}
您应该使用memmove()
(也写在您的帖子评论中。)
参考:这个线程 SO。
推荐阅读
- ruby-on-rails - Rails-Mongoid-Devise:创建时,错误消息“用户不能为空”
- django-templates - 带有模板的 Django 通用视图
- android - 使用 AndroidX 的分页示例
- python - 如何在python中返回列表中最小元素的索引
- c# - 使用 Lambda 表达式从另一个列表中选择一个列表
- python - 如何正确设置 OSX High Sierra 中网状包的 Python 路径?
- python-2.7 - 访问和安装 PIL 的问题
- c++ - 迭代器触发 Visual C++ 2017 断言
- facebook - Facebook 测试用户创建页面
- javascript - 如何从 webpack 包中导出符号以在另一个 javascript 文件中使用?