0
string scriviNumeroMinoreMille(int a)
{
    vector<string> v_zero_to_nineteen(20);
    vector<string> v_twenty_to_ninety(8);

    v_zero_to_nineteen = {"zero", "uno", "due", "tre", "quattro", "cinque", "sei", "sette", "otto", "nove", "dieci", "undici",
                          "dodici", "tredici", "quattordici", "quindici", "sedici", "diciassette", "diciotto", "diciannove"};

    v_twenty_to_ninety = {"venti", "trenta", "quaranta", "cinquanta", "sessanta", "settanta", "ottanta", "novanta"};

    string risultato;

    if(a == 0)
    {
        return risultato = "";
    }
    else if(a < 20 && a > 0)
    {
        return risultato = v_zero_to_nineteen[a];
    }
    else if(a == 20 || a == 30 || a == 40 || a == 50 || a == 60 || a == 70 || a == 80 || a == 90)
    {
        return risultato = v_twenty_to_ninety[(a/10)-2];
    }
    else if(a == 100)
    {
        return risultato = "cento";
    }

    int unita = 0;
    int decine = 0;
    int centinaia = 0;

    if(a > 99)
    {
        centinaia = a/100;
        risultato += (v_zero_to_nineteen[centinaia]);
        risultato += "cento";
    }
    if(a > 19)
    {
        if(a-(centinaia*100)%10 == 0)
        {
            decine = (a-(centinaia*100))/10;
            risultato += (v_twenty_to_ninety[decine-2]);
        }
        else
        {
            decine = (a-(centinaia*100)/10);
            risultato += v_twenty_to_ninety[decine-2];
            unita = (a-(centinaia*100)-(decine*10));
            risultato += v_zero_to_nineteen[unita];
        }
    }
    return risultato;
}

我制作了这个函数来检查从 0 到 999 的数字以转换字符串中的数字。例如,如果输入为 100,则结果将是“一百”(它被翻译成意大利语)

我不明白为什么要调试这两个 if 子句中的参数:

if(a > 99)
{
    centinaia = a/100;
    risultato += (v_zero_to_nineteen[centinaia]);
    risultato += "cento";
}
if(a > 19)
{
    if(a-(centinaia*100)%10 == 0)
    {
        decine = (a-(centinaia*100))/10;
        risultato += (v_twenty_to_ninety[decine-2]);
    }
    else
    {
        decine = (a-(centinaia*100)/10);
        risultato += v_twenty_to_ninety[decine-2];
        unita = (a-(centinaia*100)-(decine*10));
        risultato += v_zero_to_nineteen[unita];
    }
}

函数中不考虑。这两个 if 只是被跳过。我不明白为什么。如果我将 123 作为输入,则跳过这些 if。但是条件是 if(a > 99), 120 大于 99。我不明白。

4

1 回答 1

0

您的代码中有几个错误:

首先,字符串类型的 += 运算符采用“const string&”,所以不要这样做:

risultato += (v_twenty_to_ninety[decine-2])

你需要像这样传递它:

risultato += v_twenty_to_ninety[decine-2].c_str();

也在这里

decine = (a-(centinaia*100)/10);

您正在使用“centinaia”,此时它为零,因为您只在if(a > 99)if 块内进行了计算,而且 /10 应该在这样的括号之外:

decine = (a-(centinaia*100))/10

所以你需要把它移到centinaia = a/100;if 之外,所以所有 3 个 if 语句都会得到计算的变量(与其他两个相同)。

这个:

int unita = 0;
int decine = 0;
int centinaia = a/100;

对此:

int centinaia = a/100;
int decine    = (a-(centinaia*100))/10;
int unita     = (a-(centinaia*100)-(decine*10));

我对您的方法进行了更改,现在看起来像这样:

string scriviNumeroMinoreMille(int a)
{
    vector<string> v_zero_to_nineteen(20);
    vector<string> v_twenty_to_ninety(8);

    v_zero_to_nineteen = {"zero", "uno", "due", "tre", "quattro", "cinque", "sei", "sette", "otto", "nove", "dieci", "undici",
                          "dodici", "tredici", "quattordici", "quindici", "sedici", "diciassette", "diciotto", "diciannove"};

    v_twenty_to_ninety = {"venti", "trenta", "quaranta", "cinquanta", "sessanta", "settanta", "ottanta", "novanta"};

    string risultato;

    if(a == 0)
    {
        return risultato = "";
    }
    else if(a < 20 && a > 0)
    {
        return risultato = v_zero_to_nineteen[a];
    }
    else if(a == 20 || a == 30 || a == 40 || a == 50 || a == 60 || a == 70 || a == 80 || a == 90)
    {
        return risultato = v_twenty_to_ninety[(a/10)-2];
    }
    else if(a == 100)
    {
        return risultato = "cento";
    }

    int centinaia = a/100;
    int decine    = (a-(centinaia*100))/10;
    int unita     = (a-(centinaia*100)-(decine*10));

    if(a > 99)
    {

       risultato += v_zero_to_nineteen[centinaia].c_str();
       risultato += "cento";


    }
    if(a > 19)
    {
        if(a-(centinaia*100)%10 == 0)
        {
            risultato += v_twenty_to_ninety[decine-2].c_str();
        }
        else
        {
            risultato += v_twenty_to_ninety[decine-2].c_str();

            risultato += v_zero_to_nineteen[unita].c_str();
        }
    }
    return risultato;
}

对于 123 输入,它输出“unocentoventitre”,我不知道这是否正确,因为我不会说意大利语 xD

希望能帮助到你。

编辑:忘记删除/更改我插入的测试行。

于 2012-12-16T20:21:33.390 回答