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.我不明白。
答案 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
希望它有所帮助。
编辑:忘记删除/更改我插入的测试线。