我正在学习如何使用 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/