包括像“IV”这样的字符串的其余部分尚未完成,但现在的问题是对于“I”,程序返回 8 而不是 1;
#include <bits/stdc++.h> //header file
using namespace std;
int romantoint(char str[],int &n)
{
int total=0;
unordered_map <char,int> m;
m['I'] = 1;
m['II'] = 2;
m['III'] = 3;
m['IV'] = 4;
m['V'] = 5;
m['VI'] = 6;
m['VII'] = 7;
m['VIII'] = 8;
m['IX'] = 9;
m['X'] = 10;
for(int i=0;i<n;i++)
{
total = total+m[str[i]];
}
return total;
}
int main()
{
char str[] = "I";
int n = strlen(str);
cout<<romantoint(str,n);
}
Run Code Online (Sandbox Code Playgroud)
unordered_map <char,int> m;
Run Code Online (Sandbox Code Playgroud)
这一行告诉编译器您要将一个字符映射到一个整数。然而,当您初始化映射时,您已将“VIII”的字符串值映射到 8。由于键必须是一个字符,因此在映射时实际上会覆盖映射。这就是当您尝试查找映射到的值时得到 8 的原因,因为键不应超过单个字符。m['I']= 1m['VIII']=8m['I']
PS 这看起来像一个函数,您希望从中返回相应的整数值,并接受其等效的罗马数字。
我建议使用相同的 unordered_map <char,int> m;映射,但不要直接将 VIII 映射到 8,而是使用V (=5)和I (=1)的映射来使用程序逻辑计算出 VIII 的值;)