使用strchr()函数的这段代码的含义是什么

时间:2019-05-22 07:05:24

标签: c

这是Hackkerrank程序解决方案的一部分。

int distinct_chars(const char *a)
{
    int dist = 0;

    while (*a != '\0') {
        if (!strchr(a + 1, *a))
            dist++;
        a++;
    }
    return dist;
}

请解释一下。

3 个答案:

答案 0 :(得分:1)

外部循环遍历给定的输入字符串,并一次将指针a前进一个字符。对strchr的内部调用在字符串的其余部分(a)中搜索当前由a+1指向的字符。如果那产生一个空指针,则找不到该字符,并且*a处的字符被计为'distinct'。

我确实相信名称已关闭,例如在字符串“ ABCDEFAX”中,即使已经有一个A,第二个A也将被标记为“ distinct”。

答案 1 :(得分:0)

虽然循环检查行尾(\ 0), 内部-搜索数组中的第一个字符,如果没有出现,则将+1赋予dist。接下来,转到字符串的第二个字符,然后再次执行。 如果数组的所有字符都不相同,则将获得dist的最大值。

答案 2 :(得分:0)

在每次迭代中,strchar将使用唯一字符进行检查,如果char是唯一的,则“ dist”变量将随着计数器1增大。