C++ 使用str[i]'的目的是什么;0';str是字符串吗?

C++ 使用str[i]'的目的是什么;0';str是字符串吗?,c++,string,C++,String,我想解决一个我自己解决的问题。我遇到的许多解决方案都使用str[i]-“0”这个符号来对存储有数字的字符串str执行计算 下面的代码比较两个这样的字符串,对两个字符串中索引位置相同的数字进行计数,并对两个字符串中出现但索引不相同的数字进行单独计数 我的问题是猜测[i]-“0”的目的是什么。特别是它是如何工作的,因为我一直在使用int a=guess[i],并且想知道另一种方法如何更好 class Solution { public: string getHint(string secre

我想解决一个我自己解决的问题。我遇到的许多解决方案都使用str[i]-“0”这个符号来对存储有数字的字符串str执行计算

下面的代码比较两个这样的字符串,对两个字符串中索引位置相同的数字进行计数,并对两个字符串中出现但索引不相同的数字进行单独计数

我的问题是猜测[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';
    }
};
类解决方案{
公众:
字符串获取提示(字符串秘密、字符串猜测){
向量猜测(10),tb秘密(10);
int A=0,B=0;

对于(int i=0;i它通过从
char
中减去
0
的ASCII值(48),将
char
转换为整数

'9' - '0' // 9

所有这些都假设字符介于字符
0
9
之间。

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

我没有足够的积分来评论下面的答案。该问题在@sim642的另一个操作系统问题中进行了详细阐述:

The part str[i] - '0' takes the ASCII character of the corresponding digit 
which are sequentially "0123456789" and subtracts the code for '0' from the 
current character. This leaves a number in the range 0..9 as to which digit is 
in that place in the string.
您可以查看以查找ASCII数字代码

//Suppose the char numbers are '0-9' and suppose they are ACSII:
'0' - '0' = 48 - 48 = 0
'1' - '0' = 49 - 48 = 1
'2' - '0' = 50 - 48 = 2
...

如果它们不是用ASCII编码,而是用另一种方式编码,那么数字是连续编码的,因此表达式仍然有效。

我觉得你的答案不够精确;因此鼓励多个答案。事实上,投票人(我就是其中之一)确实如此。请放心,我没有解释你的答案!@ USER 2079303:确实。这就是为什么我提到ASCII和EBCDIC是这一方法的两个常见的例子。我建议不要使用这个习语,因为它不是严格的便携性:如果你需要从一个字符串中提取一个数字,那么使用一个标准的库函数。C++标准。d要求“在源和执行基本字符集中,十进制数字列表中0之后的每个字符的值应比前一个字符的值大一个。”()。这可能意味着,如果从十进制数字字符中减去字符“0”,则结果必须是该数字字符的数值。否则,该语句取决于当前字符表,并且字符值是连续编码的。所有字符编码都遵循数字数字编码的原则连续地。字符编码设计人员从计算的早期就知道这个原则很重要。@πάνταῥεῖ - c和C++都要求代码< > '0' <代码> >代码< > '9' <代码>是连续的和增加的。@ PeeBekKeal.当然,这就是我所提到的。