关于 C++ 中的'compare'函数

About the 'compare' function in c++

本文关键字:函数 compare C++ 中的 关于      更新时间:2023-10-16

我想比较两个字符串,并计算在字符串A。

中找到多少个子弦B

,但它总是显示" 0"。怎么了?

int getMatchCount(string a, string b)
{
    int num;
    num = 0;
    for (int i = 0; i < a.length() - b.length() + 1; ++i)
    {
        if (a.compare(i, b.length() + i, b, 0, b.length()) == 0) // comapre function
        {
            num = num + 1;
        }
        else
        {
            continue;
        }
    }
}

int main()
{
    int x = getMatchCount("sisisisisisisisis", "si");
    cout << x << endl;
}
  1. b.length() + i是错误的,要比较的长度是 b.length()
  2. 您不需要continue
  3. 您需要返回值。
  4. i < a.length() - b.length();将计数3的a =" sisisii",b =" si",但 i <= a.length() - b.length();将计数4。
int getMatchCount(string a, string b)
{
    int num;
    num = 0;
    for (int i = 0; i <= a.length() - b.length(); i++) {
        if (a.compare(i, b.length(), b, 0, b.length()) == 0) {
            num = num + 1;
        }
    }
    return num;
}
int main()
{
    int x = getMatchCount("sisisisisisisisis", "si");
    cout << x << endl;
    return 0;
}

您要使用的std::string::compare()形式的签名是

int比较(size_t pos,size_t len,const string&str,str, size_t传票,size_t sublen(const;

第二个参数应该是要比较的字符数。

 if (a.compare(i, b.length(), b, 0, b.length()) == 0)

请参阅按预期输出8的工作代码。也不要忘记在结尾处 return num,@gabor

指出