试图将JS函数转换为C#函数

时间:2017-05-28 23:56:59

标签: javascript c#

我尝试转换我的函数,它使用一个RomanNumeral输入将它作为十进制值输出,从JS输出到C#,但不知何故我卡住了,真的需要建议如何使这个工作。

using System;
using System.Collections.Generic;

class solution
{

static int romanToDecimal(string romanNums)
{
    int result = 0; 
    int [] deci = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    string [] roman = {"M", "CM", "D", "CD", "C", "XD", "L", "XL", "X", "IX", "V", "IV", "I"};

    for (var i = 0; i < deci.Length; i++)
    {   
        while (romanNums.IndexOf(roman[i]) == 0) 
        {
            result += deci[i]; 

            romanNums = romanNums.Replace(roman[i], " "); 
        }                                               
    }                                                   
    return result;                                  
}

static void Main()
{

Console.WriteLine(romanToDecimal("V")); //Gibt 5 aus.
Console.WriteLine(romanToDecimal("XIX")); // Gibt 19 aus.
Console.WriteLine(romanToDecimal("MDXXVI"));// Gibt 1526 aus.
Console.WriteLine(romanToDecimal("MCCCXXXVII"));// Gibt 1337 aus.
}

}

1 个答案:

答案 0 :(得分:2)

替换在C#中的工作方式不同,使用substring删除匹配的前几个字符:

    static int romanToDecimal(string romanNums)
    {
        int result = 0;
        int[] deci = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
        string[] roman = { "M", "CM", "D", "CD", "C", "XD", "L", "XL", "X", "IX", "V", "IV", "I" };

        for (var i = 0; i < deci.Length; i++)
        {
            while (romanNums.IndexOf(roman[i]) == 0)
            {
                result += deci[i];

                romanNums = romanNums.Substring(roman[i].Length);
            }
        }
        return result;
    }