int数组,但索引是字符?

问题描述 投票:2回答:3

我很困惑,当索引是字符时,怎么可能有一个整数数组?另一个困惑是这条线

if(i + 1 < N && nums[s[i+1]] > nums[s[i]])

将字符串转换为整数,然后将其映射到nums数组,类似于将其哈希为索引吗?`>

 int romanToInt(string s) {
            const int N = s.length();
            int nums[128];
            nums['I'] = 1;
            nums['V'] = 5;
            nums['X'] = 10;
            nums['L'] = 50;
            nums['C'] = 100;
            nums['D'] = 500;
            nums['M'] = 1000;
            int result = 0;
            for(int i = 0; i < N; ++i)
            {
                if(i + 1 < N && nums[s[i+1]] > nums[s[i]])
                    result -=  nums[s[i]]; 
                else
                    result += nums[s[i]];
            }
            return result;
        }

我很困惑,当索引是字符时,怎么可能有一个整数数组?如果(i + 1 nums [s [i]])是字符串...

c++ algorithm hash
3个回答
5
投票

[在算术表达式中使用小于int的类型的值(例如,作为数组索引运算符的运算符时,则为promotedint

但是请注意,数组元素类型和索引类型并不是真正相关。


2
投票

char实际上只是数字。它们是一字节整数。您有int个,也有short个,也有char个。

它们的数值(您可以通过转换或提升为另一种整数类型,例如int来观察,然后将其打印出来),当从字符文字初始化时,通常是该文字中字形的ASCII码。数组索引升为int,因此您实际上只是在使用int。这里没有魔术。

char是“字符”的概念并不是真的。只是许多格式化/输出函数对它们进行了专门的处理,因此看起来确实如此。 “字符”是(不同地)抽象概念(例如Unicode字符U + 0056,根据所选的编码可以用各种方式表示)或字形的形状(“字母A”); char都不提供这些信息(如上所述,字符literal确实如此)。它的名字不好,但这来自过去。


0
投票

基本上,所有字符都由其ASCII值表示,就像C ++中的其他符号一样。您可以通过单击此链接https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html在此处签出ASCII表。因此,在这行代码中nums ['V'] = 5也可以写为nums [86] = 5,因为V在ASCII中表示为86表格。

© www.soinside.com 2019 - 2024. All rights reserved.