计算子串的出现次数

时间:2014-04-11 20:15:32

标签: c++

我有一个任务来计算char字符串中子字符串的出现次数。我写这段代码,但在某些输入输出是错误的。像字符串是“hassana”而sub是“as”然后它输出2 ...某个plz帮助我

int CharString :: countOccurenceOf(const char* substr)
{
    int count = 0;
    bool find = false;

    for(int i = 0; i < size1; i++)
    {
        if(cstr[i] == substr[0])
        {
            int x = i;
            int c = 1;
            find = true;
            while ( substr[c] != '\0' && find == true && (x+1) < size1)
            {
                if(cstr [x+1] != substr[c])
                {
                    find = false;
                }
                c++;
                x++;
            }
            if (find == true)
            {
                count++;
                i = i + c-1;
            }
        }
    }
    return count;
}

得到一些解决方案.....是吗?

int CharString :: countOccurenceOf(const char* substr)
{
int len = 0;

if ( substr != '\0')
{
    while( substr[len] != '\0')
        len++;
}
int count = 0;
bool find = false;

for(int i = 0; i < size1; i++)
{
    if(cstr[i] == substr[0])
    {
        int x = i;
        int c = 1;
        find = true;
        while ( substr[c] != '\0' && find == true && (x+1) < size1)
        {
            if(cstr [x+1] != substr[c])
            {
                find = false;
            }
            c++;
            x++;
        }
        if (find == true && c == len)
        {
            count++;
            i = i + c-1;
        }
    }
}
return count;

}

2 个答案:

答案 0 :(得分:1)

假设cstr是你的类内部字符串:

int CharString :: countOccurenceOf(const char* substr)
{
    int occurrencies = 0;
    unsigned char* s = cstr;
    while (s) {
        if (strstr(s,substr)) { occurrencies++; s+= strlen(substr); }
        else s++;
    }
    return occurrencies;
}

答案 1 :(得分:1)

问题是,如果x + 1&lt;尺寸1。如果子字符串的第一个字符与主字符串的最后一个字符匹配,那么这将自动中断并且&​​#34;找到&#34;仍然会设置为true,因此您将匹配增加1.有许多方法可以更改代码来解决此问题;希望你现在能找到一个你知道问题的原因。