想当然了,结果一直为0还不明所以找了半天错误。
to_string()方法会返回char的ASCII码值。因为人家函数参数根本就没有char.只能int float之类的数值。所以后来改用了截取子字符串函数substr(start,length)。这里也有坑,注意substr()和substring()的区别。前者第二个参数是截取的长度,后者是截取的截至(start,end)且不包括end.
3.14更正一下,C++没有substring方法,和Java搞混了
以下是Leetcode罗马数字转整数答案。第二遍做果然有提升,第一遍时还不会用map,一大堆if用的脑壳疼。
class Solution {
public:
int romanToInt(string s) {
map<string,int> m;
int n=s.size();
m["I"]=1;
m["IV"]=4;
m["V"]=5;
m["IX"]=9;
m["X"]=10;
m["XL"]=40;
m["L"]=50;
m["XC"]=90;
m["C"]=100;
m["CD"]=400;
m["D"]=500;
m["CM"]=900;
m["M"]=1000;
int sum=0,i;
for( i=0;i<n-1;i++)
{
string temp=s.substr(i,2);
if(m[temp]>0)
{
sum+=m[temp];
i++;
continue;
}
sum+=m[s.substr(i,1)];
}
if(i!=n)
sum+=m[s.substr(i,1)];
return sum;
}
};