【问题标题】:About the 'compare' function in c++关于 C++ 中的“比较”功能
【发布时间】:2018-02-15 06:04:38
【问题描述】:

我想比较两个字符串,并计算在字符串 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;
}

【问题讨论】:

  • 你的字符串 a 和 b 有多长?
  • A 是 5,B 是 2..
  • 这并不能解决您的问题,但您不需要 if/else 语句的 else 部分。默认情况下它将继续,因为 for 循环中没有其他代码。也可以将num = num + 1 缩短为num += 1
  • 那我该怎么办? “比较”功能无法解决我的问题?

标签: c++ string compare


【解决方案1】:
  1. b.length() + i错了,要比较的长度是b.length()
  2. 你不需要continue
  3. 您需要返回值。
  4. i &lt; a.length() - b.length(); 对于 a = "sisisisi", b = "si" 将计为 3,但 i &lt;= 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;
}

【讨论】:

  • 不客气!并且还忘了提到i &lt; a.length() - b.length(); 不会计算最后一场比赛,但i &lt;= a.length() - b.length(); 会。
【解决方案2】:

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

int 比较 (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen) const;

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

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

查看working code,它按预期输出8。 也不要忘记@Gabor 指出的最后return num

【讨论】:

    猜你喜欢
    • 2012-06-10
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多