c - 如何完成 K&R 练习 2-4?

标签 c string kernighan-and-ritchie

我正在学习如何使用 k&r 书(《C 编程语言》)用 C 语言编写程序,但其中一个练习有问题。它要求我检测并删除字符串 s1 中的一个字符,该字符与字符串 s2 中的任何字符匹配。

所以,说 s1 = "A";

并且 s2 =“AABAACAADAAE”

我希望它返回“BCDE”

我知道我走在正确的道路上,我只是不知道如何很好地设计程序,你能给我任何额外的提示吗?我尝试阅读有关二叉搜索树算法的内容,但觉得它对于这个平凡的任务来说有点太先进了。

谢谢大家!

/* An alternate version of squeeze(s1, s2) that deletes each character in
 * s1 that matches any character in the string s2
 *
 * <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="276649404e42674843415f09485540" rel="noreferrer noopener nofollow">[email protected]</a>
 */

#include <stdio.h>
#include <string.h>

void squeeze(char s[], char t[]);

char string[] = "BAD";
char sstring[] = "ABC";

int
main(void)
{
    squeeze(string, sstring);
    return 0;
}

void
squeeze(char s[], char t[])
{
    int i, j, d;

    d = 0;
    if(strstr(s, t) == NULL)
        printf("%c", s[i]);
    s[j] = '\0';
}

最佳答案

很棒的书。如果我是你,我会按照第 2.8 节中的挤压()进行操作,但我会编写并利用一个函数,而不是直接比较(s[i] != c)

 int contains(char s[], int c)

如果字符串 s 包含 c,则返回 1,否则返回 0。从简单的方法开始;当它起作用时,您可以使用更复杂的解决方案来提高性能(二分搜索,但请注意,该问题不需要 s2 中的字符按特定顺序排列)。

关于c - 如何完成 K&R 练习 2-4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/418894/

相关文章:

java - 字符串连接转换为 Java 中的 stringbuilder

c - 如何在函数文件和项目文件中正确包含自己的库

无法打印 char 数组的元素

c - 我无法解决 "segmentation fault: 11"

c - 从 gchar 缓冲区 (libcurl) 向 ftp 服务器发送图像

c - 在 C 中创建变量的宏

使用 fclose() 后损坏的双链表;

c++ - 在 C++ 中获取 WMI 查询的行数

在 C 中的字符串 vector 之间复制字符串

c++ - 删除第一个和最后一个字符 C++