现在的位置: 首页 > 综合 > 正文

杂题:Counting 8-bits pattern

2019年07月25日 ⁄ 综合 ⁄ 共 591字 ⁄ 字号 评论关闭

Counting 8-bits pattern

给一个char* str, 给一个 char pattern, 要求找出8bit pattern在str里出现几次。e.g. str is "13" 就是0000,0001,0000,0011,pattern is 1000,0001 输出结果就

是1次。

int countPattern(char* str, char pattern);

思路:

每次抽出两个字符做bitwise rolling。检查第一个字符是否符合pattern。

题解:

int countPattern2(char c1, char c2, char pattern)
{
    int count = 0;
    char mask = (1 << 7);
    int i;
    for(i = 0; i < 8; ++i)
    {
        if (c1 == pattern)
            ++count;

        c1 <<= 1;
        c1 += ((c2 & mask) ? 1 : 0);
        c2 <<= 1;
    }

    return count;
}

int countPattern(const char* str, char pattern)
{
    const s_length = strlen(str);
    int i;
    int count = 0;

    for(i = 0; i < s_length - 1; ++i)
        count += countPattern2(str[i], str[i + 1], pattern);

    if (str[s_length - 1] == pattern)
        ++count;

    return count;
}

抱歉!评论已关闭.