13.Roman to Integer(find()函數)

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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容