美文网首页
13.Roman to Integer(find()函数)

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

作者: Asian_Road | 来源:发表于2016-09-09 16:59 被阅读0次

    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

    相关文章

      网友评论

          本文标题:13.Roman to Integer(find()函数)

          本文链接:https://www.haomeiwen.com/subject/wvgeettx.html