如何在不使用字符串库的情况下查找另一个数组中是否存在一个char数组?

时间:2019-04-05 09:12:10

标签: c arrays character

我有两个charchar search_array[8]数组,我正在使用input_array[30]来获取字符,但是我想查找输入中是否存在搜索数组数组而不使用字符串库。

示例:

搜索数组:getchar

输入数组hello

2 个答案:

答案 0 :(得分:2)

您需要一些字符串比较循环,例如可以在strcmpstrcspn中找到的字符串比较循环。假设您使用的是C字符串之类的终端值;如果您使用一些长度字段,则需要对循环进行调整以清楚地说明这些问题。以下是一些示例:

int strcmp(char const *x, char const *y) {
    while (*x && *x == *y) {
        x++;
        y++;
    }
    return ((unsigned)*x > (unsigned)*y) - ((unsigned)*x < (unsigned)*y);
}

size_t strcspn(char const *x, char const *y) {
    char const *x_ = x;
    while (*x_) {
        for (char const *y_ = y; *y_; y_++) {
            if (*x_ == *y_)
                return x_ - x;
        }
        x_++;
    }
    return x_ - x;
}

答案 1 :(得分:1)

您的目标显而易见的解决方案是使用标准库的strstr函数。

由于不允许使用字符串库,因此应编写自己的strstr版本并使用它。

这是一个简单但合规的实现:

char *my_strstr(const char *s1, const char *s2) {
    for (;;) {
        for (size_t i = 0;; i++) {
            if (s2[i] == '\0')
                return (char *)s1;
            if (s1[i] != s2[i])
                break;
        }
        if (*s1++ == '\0')
            return NULL;
    }
}

然后您可以通过以下方式使用此功能:

    if (my_strstr(input_array, search_array)) {
        printf("string was found\n");
    } else {
        printf("string was not found\n");
    }