在 str 是字符串的情况下使用 str\[i\]-'0' 的目的是什么?

新手上路,请多包涵

我打算解决我自己解决的问题。我遇到的许多解决方案都使用这种 str[i]-‘0’ 表示法来对其中存储了数字的字符串 str 执行计算。

下面的代码比较了两个这样的字符串,以计算两个字符串中具有相同索引位置的数字,并为出现在两个字符串中但没有相同索引的数字维护一个单独的计数。

我的问题是guess[i] - ‘0’ 的目的是什么。特别是它是如何工作的,因为我一直在使用 int a =guess[i] 并且想知道另一种方法如何更好。

 class Solution {
public:
    string getHint(string secret, string guess) {
        vector<int>tb_guess(10),tb_secret(10);
        int A=0,B=0;
        for (int i=0;i<secret.size();++i){
            if (secret[i]==guess[i]) A++;
            else {
                tb_guess[guess[i]-'0']++;
                tb_secret[secret[i]-'0']++;
            }
        }
        for (int i=0;i<10;++i){
            B=B+ min(tb_guess[i],tb_secret[i]);
        }
        return to_string(A)+'A'+to_string(B)+'B';
    }
};

原文由 Curt cobain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 640
2 个回答

如果 str 包含字符串化的数字并且您使用的是 ASCII 或 EBCDIC 编码(或者可能是其他编码),则 str[i] - '0' 将位置 i 处的 字符 转换为数字。

原文由 Bathsheba 发布,翻译遵循 CC BY-SA 3.0 许可协议

它通过从 --- 减去 --- 的 ASCII 值 (48) 将 0 char char 转换为整数

'9' - '0' // 9

所有这一切都是假设字符介于字符 09 之间。

原文由 Ryan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题