首页 > 解决方案 > 无法比较 C++ 中字符串上使用的计数函数?

问题描述

这是代码:

#include <iostream>
#include <ostream>
#include <bits/stdc++.h>
#include <string>
int main(){
    std::string num {"hello"};
    std::string num1 {"hii"};
    int  nums = std::count(num.begin(),num.end(),num[0]);
    int  nums1 = std::count(num1.begin(),num1.end(),num1[0]);
    std::cout << std::count(num1.begin(),num1.end(),num1[0] ) == count(num.begin(),num.end(),num[0]);
    std::cout << nums == nums1 ;
    return 0;
}

如果有人知道问题,请帮助。更新......

标签: c++

解决方案


要使用==inoperator <<我们需要在此处添加括号,因为重载运算符 << 具有比比较运算符更高的优先级。如果你使用现代编译器,它会给你详细的提示,比如 clang 11 会给使用这样的警告:

warning: overloaded operator << has higher precedence than comparison operator [-Woverloaded-shift-op-parentheses] 

然后我们可以将其修复为:

#include <algorithm>
#include <iostream>
#include <ostream>
#include <string>
int main() {
  std::string num{"hello"};
  std::string num1{"hii"};
  std::size_t nums = std::count(num.begin(), num.end(), num[0]);
  std::size_t nums1 = std::count(num1.begin(), num1.end(), num1[0]);
  std::cout << (std::count(num1.begin(), num1.end(), num1[0]) ==
                count(num.begin(), num.end(), num[0]));
  std::cout << (nums == nums1);
  return 0;
}

在线演示


推荐阅读