题目:
从字符串删除特定子字符串。
条件:
这题目是从“ C 和 指针”这书看到的,条件三是我自己添加的。
函数原型:
void del_substr(char *str, const char *substr);
举例:
char str[] = "ABCDEFG";
char substr[] = "CDE";
del_substr(str, substr);
这个时候,str 的值就应该是"ABFG"。
如果 substr 为 “ CDG ”, 执行该函数,str 保持不变("ABCDEFG")
实现:
以下代码乃本人所写,虽然刚学 C, 但是仍然对此代码不满意,代码行数太多了,太绕了,不直接。直觉告诉我,还可以写得更精简。望各位赐教一下,多谢!
void del_substr(char *str, const char *substr) {
int i = 0, j = 0;
while (*(str+i)) {
j = 0;
while (*(substr+j) && *(substr+j) == *(str+i+j)) {
j++;
}
if (! *(substr+j)) {
break;
}
else {
i++;
}
}
if (! *(substr+j)) {
while ((*(str+i) = *(str+i+j))) {
i++;
}
}
}
奖励:
代码写得最简单,最精炼, 我请你喝牛奶。:)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.