c能将 char 类型的 数据作为int 类型的数组的下标吗?

发布于 2022-09-12 02:51:26 字数 909 浏览 17 评论 0

题目:给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

int numJewelsInStones(char* J, char* S)
{
    int w[58] = {0};
    int count = 0;
    char ch;
    
    while(ch=*J++)
    {
        w[ch-'A']++;
    }
    while(ch=*S++)
    {
        if(w[ch-'A'])
            count++;
    }
    return count;

一个简单的查找问题,这里使用了hashmap 的方法,对减少了查找的时间, 我的 问题是 :

ch=*J;
w[ch*-'A'];


int w[58];
char ch;
  1. 为什么: 可以将 char 类型的 ch 作为下标;
  2. 还有一个问题 : ch-'A' 得到的是对应的ASCII 的码值差;
    那 ch-'0' 对应的是该字符的ASCII 码值 但是我今天在直接使用这个表达式求字母对应的码值是却不正确?
    希望大神们帮我解释一下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

作妖 2022-09-19 02:51:26

为什么: 可以将 char 类型的 ch 作为下标;

  1. integer type 都可以做下标。包括 char, short, int, long, long long int, enum, 等等。
  2. 'A' 的类型是 int ,不是 char
  3. ch - 'A' 的类型也是 int ,不是 char

ch-'0' 对应的是该字符的ASCII 码值

'0'0 ('\0') 不是一个东西。前者其实不是0

ch-'0' 得到的也是对应的 ASCII 码差值,但是 '0' 的 ASCII 码值不是 0

浴红衣 2022-09-19 02:51:26

没看你的题目,直接回答你的为什么。

  1. 为什么可以将 char 类型的 ch 作为下标?

    答:因为 char 会被自动转为 int 类型,转出的值就是这个字符的 ASCII 码。

  2. ......那 ch-'0' 对应的是该字符的 ASCII 码值,但是我今天在直接使用这个表达式求字母对应的码值是却不正确?

    答:ch - '0' 对应的不是该字符的 ASCII 码值。如果 ch 等于 '5',那么 ch - '0' 等于整数类型 5。

酒中人 2022-09-19 02:51:26
  1. 因为 char 类型是 整数类型,整数类型都可以作为下标。有些编译器可能会警告
  2. ch-'A' 是 ch 与 字符 A 的 ASCII码差值;ch-'0' 是 ch 与 字符 0 的 ASCII码差值;ch 本身就是 ASCII值,你也是认为是 ch-0
昇り龍 2022-09-19 02:51:26

char 类型可以无损转换成 int 类型,因此可以作为数组的下标。

例如,a 字母对应的数字为 97,b对应的为 98,两者之差 b - a 为 1,不过 1 没有对应的字母。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文