关于 C++ 中的'compare'函数
About the 'compare' function in c++
我想比较两个字符串,并计算在字符串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;
}
-
b.length() + i
是错误的,要比较的长度是b.length()
。 - 您不需要
continue
。 - 您需要返回值。
-
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
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- std::set<Key,Compare,Allocator>::find() 函数使用"<"运算符而不是"=="运算符背后的直觉是什么?
- s.compare 成员函数在下面的C++代码中的行为如何?
- 关于 C++ 中的'compare'函数
- 如何使std::pop_heap接受适当的函数指针作为Compare
- 将对象传递给compare函数会使排序变慢
- 为什么std::sort()需要静态Compare函数
- 用C++11将compare函数传递给std::multiset
- c++中std::map中的compare函数如果自反为真,该如何工作?