题目:
从字符串删除特定子字符串。
条件:
- 不能使用任何函数。
- 不能用数组下标。
- 除去函数参数,函数内使用的变量不能超过 2 个。
这题目是从“ 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++;
}
}
}
奖励:
代码写得最简单,最精炼, 我请你喝牛奶。:)