问答

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

作者:admin 2021-08-06 我要评论

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

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

题目:给定字符串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 码值 但是我今天在直接使用这个表达式求字母对应的码值是却不正确?
    希望大神们帮我解释一下。
###
为什么: 可以将 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

###

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

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

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

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

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

###
  1. 因为 char 类型是 整数类型,整数类型都可以作为下标。有些编译器可能会警告
  2. ch-'A' 是 ch 与 字符 A 的 ASCII码差值;ch-'0' 是 ch 与 字符 0 的 ASCII码差值;ch 本身就是 ASCII值,你也是认为是 ch-0
###

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

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • c能将 char 类型的 数据作为int 类型的

    c能将 char 类型的 数据作为int 类型的

  • malloc和new的内存 如果没有free或者de

    malloc和new的内存 如果没有free或者de

  • git merge branchA是把branchA和当前分

    git merge branchA是把branchA和当前分

  • redhat系统如何使用vnc连接桌面?

    redhat系统如何使用vnc连接桌面?

腾讯云代理商
海外云服务器