C 语言题目,造轮子,看谁的轮子最厉害,有牛奶奖励。

2017-06-22 03:14:00 +08:00
 NullMan

题目:

从字符串删除特定子字符串。

条件

这题目是从“ 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++;
        }
    }
}

奖励:

代码写得最简单,最精炼, 我请你喝牛奶。:)

4820 次点击
所在节点    C
46 条回复
yangff
2017-06-22 18:29:46 +08:00
@NullMan eWFuZ2ZmMUBnbWFpbC5jb20=

谢啦 w
NullMan
2017-06-22 18:31:12 +08:00
@deeporist 听你这么一说,我就欣慰了,我可写了 2 个小时,1.5 小时在脑子里写,0.5 小时上机写,我都认为自己太菜了。
NullMan
2017-06-22 18:36:08 +08:00
@yangff 支付宝转给你啦。
Actrace
2017-06-22 20:58:40 +08:00
高级语言代码最重要的目的是要让人能看懂的同时让机器也能懂。
不知各位往死里运用各种缩减有啥意义。
lrxiao
2017-06-22 21:11:16 +08:00
GOLF 娱乐吗..
yangff
2017-06-22 21:12:57 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370191

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX