c能将 char 类型的 数据作为int 类型的数组的下标吗?
题目:给定字符串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;
- 为什么: 可以将 char 类型的 ch 作为下标;
- 还有一个问题 : ch-'A' 得到的是对应的ASCII 的码值差;
那 ch-'0' 对应的是该字符的ASCII 码值 但是我今天在直接使用这个表达式求字母对应的码值是却不正确?
希望大神们帮我解释一下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
char
,short
,int
,long
,long long int
,enum
, 等等。'A'
的类型是int
,不是char
。ch - 'A'
的类型也是int
,不是char
。'0'
和0
('\0'
) 不是一个东西。前者其实不是0
。ch-'0'
得到的也是对应的 ASCII 码差值,但是'0'
的 ASCII 码值不是0
。没看你的题目,直接回答你的为什么。
答:因为 char 会被自动转为 int 类型,转出的值就是这个字符的 ASCII 码。
答:
ch - '0'
对应的不是该字符的 ASCII 码值。如果ch 等于 '5'
,那么ch - '0'
等于整数类型 5。ch-'A'
是 ch 与 字符 A 的 ASCII码差值;ch-'0'
是 ch 与 字符 0 的 ASCII码差值;ch 本身就是 ASCII值,你也是认为是ch-0
char 类型可以无损转换成 int 类型,因此可以作为数组的下标。
例如,
a
字母对应的数字为 97,b
对应的为 98,两者之差b - a
为 1,不过 1 没有对应的字母。