Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.
1.算法
int romanToInt(string s) {
string t="IVXLCDM";
vector<int> q={1,5,10,50,100,500,1000};
int n=0;
for(int i=0;i<s.length()-1;i++){
if(t.find(s[i])>=t.find(s[i+1])){
n = n+q[t.find(s[i])];
}
else n = n-q[t.find(s[i])];
}
n=n+q[t.find(s[s.length()-1])];
return n;
}
2.思路
根據羅馬數字的規律
重復數次:1個羅馬數字重復幾次,就表示這個數的幾倍.
右加左減:在一個較大的羅馬數字的右邊記上一個較小的羅馬數字,表示大數字加小數字.在一個較大的數字的左邊記上1個較小的羅馬數字,表示大數字減小數字.但是,左減不能跨越一個位數.比如,99不可以用IC表示,而是用XCIX表示.此外,左減數字不能超過1位,比如8寫成VIII,而非IIX.同理,右加數字不能超過3位,比如14寫成XIV,而非XIIII.
遍歷字母串,如果某個元素要比它的下一位元素小,則減去相應值,反之加上對應值。
至于對應值的計算,可以直接放在向量中取(如上面的代碼所做的)。也可以直接計算,規律是
3.find()相關函數
- find() 查找第一次出現的目標字符,可以指定查找位置;如果查找成功,則輸出查找到的第一個位置,否則返回-1;
- find_first_of() 查找子串中的某個字符最先出現的位置。find_first_of()不是全匹配,而find()是全匹配;
- find_last_of() 與find_first_of()功能差不多,只不過find_first_of()是從字符串的前面往后面搜索,而find_last_of()是從字符串的后面往前面搜索;
- find_first_not_of() 查找第一個不匹配
- find_if() 查找是否存在 bool