gpt4 book ai didi

c++ - 有没有办法对字符串中的字符使用枚举? C++

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:07 25 4
gpt4 key购买 nike

这是从 LeetCode 中删除的,但基本上给出了一个由几个唯一字符组成的字符串,每个字符都有一个关联的整数值,我需要快速处理字符串的总整数值。我认为枚举会很有用,因为您知道将要组成您的字符串的内容。

枚举是我的字符串中可以出现的字符类型(可以看出是有限制的)。如果具有较小值的字符位于具有较大值的字符之前,例如 IV,则我从其后一个字符中减去前一个字符的值。不然你加。该代码是我的尝试,但我无法让枚举与我的算法一起使用...

std::string s = "III";
int sum = 0;

enum {I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000};

// O(n) iteration.
for (int i = 0; i < s.length(); i++) {
// Must subtract.
if (s[i] < s[i+1]) {
sum += s[i+1] - s[i];
}
// Add.
else {
sum += s[i];
}
}

std::cout << "sum is: " << sum;

我的问题是 1) 是否可以将枚举与字符串一起使用? 2) 我知道可以使用 unordered_map 但我认为枚举要快得多。

最佳答案

如果您不介意较小的内存开销,您可以这样做:

int table[256];
table['I']=1;
table['V']=5;
...

然后

sum += table[s[i]];

等等。此方法保证为 O(1),这基本上是您可以获得的最快的解决方案。您也可以使用 std::array 而不是 POD 数组,将所有这些封装在某个类中并添加断言,但这是想法。

关于c++ - 有没有办法对字符串中的字符使用枚举? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50284740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com