【问题标题】:Search for Char in String在字符串中搜索字符
【发布时间】:2016-08-25 23:12:56
【问题描述】:

我的代码返回零,而不是实际计算数字中实际存在的数字实例的数量。我对自己做错了什么感到困惑。

int number_times_appear(int digit, int number)
{
    int total = 0;
    string stringNumber = to_string(number);
    char charDigit = digit;

    total = count(stringNumber.begin(), stringNumber.end(), charDigit);
    cout << total;
    return total;
}

【问题讨论】:

  • char charDigit = digit; 并没有按照你的想法去做。停止尝试基于猜测编写 C++。
  • 我在另一个论坛上看到有人这样做。他们将其描述为隐式类型转换。
  • 这正是我要说的。在您的代码中使用隐式转换 int -> char 之前,请查看它的作用。
  • 当然它会转换(以及您愉快地忽略的编译器警告),但它仍然没有按照您的想法执行。

标签: c++


【解决方案1】:

你应该做的转换是错误的

char charDigit = '0' + digit;// to convert it to char

详细解释见this post

我还创建了一个Ideone sn-p here

【讨论】:

    【解决方案2】:

    char charDigit = digit; 并不像您认为的那样做。这将采用 digit 中的值并将其转换为基于您的字符集的字符(例如,对于美国 ASCII,this table)。例如,9 中的 digit 实际上可以在您的字符串中搜索标签!

    您想要 char charDigit = '0'+digit; 代替,因为再次使用 ASCII 示例,'0' 根据链接表计算为 48,数字 '1'-'9' 紧随其后为 49-57。

    【讨论】:

    • 不,此答案中的任何一种转换都不涉及 ASCII。第一个只是整数转换,第二个需要适用于每个支持的字符集,无论字符集如何编码'0'
    • @PeteBecker 在技术上也许是正确的,但 OP 几乎可以肯定使用 ASCII,并且在total = count(stringNumber.begin(), stringNumber.end(), charDigit); 中将其用作字符,而不是数字,所以我认为你有点太迂腐了...
    • @PeteBecker 无论如何,为了清楚起见,我已经编辑了答案,看看你的评论是否是这个意思。如果不是,你需要用另一种方式解释自己
    猜你喜欢
    • 2016-11-30
    • 2019-10-06
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多