如果内部功能

时间:2012-12-16 19:37:17

标签: c++ function if-statement

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];
    }
}
函数中未考虑

。刚跳过这两个ifs。我不明白为什么。如果我将123作为输入,则跳过这些ifs。但条件是如果(a> 99),120大于99.我不明白。

1 个答案:

答案 0 :(得分:0)

您的代码中存在多个错误:

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

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也应该在parentesis之外,如下所示:

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

希望它有所帮助。

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