1-10:one、two 、three 、four 、five 、six 、seven 、eight 、nine、 ten 。
11-19:eleven 、twelve 、thirteen 、fourteen 、fifteen 、sixteen 、seventeen、 eighteen、 nineteen 。
20-29:twenty 、twenty-one、 twenty-two 、twenty-three 、twenty-four 、twenty-five 、twenty-six 、twenty-seven、 twenty-eight 、twenty-nine 。
30-39:thirty、 thirty-one 、thirty-two 、thirty-three、 thirty-four 、thirty-five、 thirty-six、 thirty-seven 、thirty-eight 、thirty-nine 。
40-49:forty、 forty-one 、forty-two 、forty-three 、forty-four 、forty-five 、forty-six 、forty-seven 、forty-eight、 forty-nine 。
50-59:fifty、 fifty-one、 fifty-two 、fifty-three 、fifty-four 、fifty-five 、fifty-six、 fifty-seven 、fifty-eight、 fifty-nine 。
60-69:sixty、 sixty-one 、sixty-two 、sixty-three 、sixty-four 、sixty-five、 sixty-six 、sixty-seven 、sixty-eight 、sixty-nine 。
70-79:seventy 、seventy-one、 seventy-two 、seventy-three 、seventy-four、 seventy-five、 seventy-six 、seventy-seven 、seventy-eight 、seventy-nine 。
80-89:eighty 、eighty-one、 eighty-two、 eighty-three、 eighty-four 、eighty-five 、eighty-six 、eighty-seven、 eighty-eight 、eighty-nine 。
90-99:ninety 、ninety-one 、ninety-two 、ninety-three 、ninety-four 、ninety-five 、ninety-six 、ninety-seven 、ninety-eight 、ninety-nine 。
100:one hundred。
规则:
1、一到十三,需要直接记住,无规律可寻。
2、十四到十九就是在英文单词四到九之后加上-teen。
3、二十、三十、四十、五十、六十、七十、八十、九十都是以-ty结尾。
4、二十一到二十九、三十一到三十九、四十一到四十九、五十一到五十九、六十一到六十九、七十一到七十九、八十一到八十九、九十一到九十九,就是在二十、三十、四十、五十、六十、七十、八十、九十英语的后面加上one到nine。
//解析组合的数字单词
bool CUnisound::ParseEnNumber(const char *pData,int &iNum)
{
m_Log.LogDebug("[%s][%s][%d] ParseEnNumber begin", __FILE__, __FUNCTION__, __LINE__);
string strData = pData;
iNum = 0;
if((int)strData.find("twenty") >= 0 || (int)strData.find("TWENTY") >= 0)
iNum += 20;
else if((int)strData.find("thirty") >= 0 || (int)strData.find("THIRTY") >= 0)
iNum += 30;
else if((int)strData.find("forty") >= 0 || (int)strData.find("FORTY") >= 0)
iNum += 40;
else if((int)strData.find("fifty") >= 0 || (int)strData.find("FIFTY") >= 0)
iNum += 50;
else if((int)strData.find("sixty") >= 0 || (int)strData.find("SIXTY") >= 0)
iNum += 60;
else if((int)strData.find("seventy") >= 0 || (int)strData.find("SEVENTY") >= 0)
iNum += 70;
else if((int)strData.find("eighty") >= 0 || (int)strData.find("EIGHTY") >= 0)
iNum += 80;
else if((int)strData.find("ninety") >= 0 || (int)strData.find("NINETY") >= 0)
iNum += 90;
else if((int)strData.find("two hundred") >= 0 || (int)strData.find("TWO HUNDRED") >= 0)
iNum += 200;
else if((int)strData.find("hundred") >= 0 || (int)strData.find("HUNDRED") >= 0)
iNum += 100;
else
{
if(ParseAloneEnNumber(pData,iNum))
return true;
else
return false;
}
ParseAloneEnNumber(pData,iNum);//将组合的单词加上单个的单词 例如:twenty one = 20 + 1
return true;
}
//解析单个的数字单词
bool CUnisound::ParseAloneEnNumber(const char *pData,int &iNum)
{
string strData = pData;
if((int)strData.find("one") >= 0 || (int)strData.find("ONE") >= 0)
iNum += 1;
else if((int)strData.find("two") >= 0 || (int)strData.find("TWO") >= 0)
iNum += 2;
else if((int)strData.find("three") >= 0 || (int)strData.find("THREE") >= 0)
iNum += 3;
else if((int)strData.find("four") >= 0 || (int)strData.find("FOUR") >= 0)
iNum += 4;
else if((int)strData.find("five") >= 0 || (int)strData.find("FIVE") >= 0)
iNum += 5;
else if((int)strData.find("six") >= 0 || (int)strData.find("SIX") >= 0)
iNum += 6;
else if((int)strData.find("seven") >= 0 || (int)strData.find("SEVEN") >= 0)
iNum += 7;
else if((int)strData.find("eight") >= 0 || (int)strData.find("EIGHT") >= 0)
iNum += 8;
else if((int)strData.find("nine") >= 0 || (int)strData.find("NINE") >= 0)
iNum += 9;
else if((int)strData.find("ten") >= 0 || (int)strData.find("TEN") >= 0)
iNum += 10;
else if((int)strData.find("eleven") >= 0 || (int)strData.find("ELEVEN") >= 0)
iNum += 11;
else if((int)strData.find("twelve") >= 0 || (int)strData.find("TWELVE") >= 0)
iNum += 12;
else if((int)strData.find("thirteen") >= 0 || (int)strData.find("THIRTEEN") >= 0)
iNum += 13;
else if((int)strData.find("fourteen") >= 0 || (int)strData.find("FOURTEEN") >= 0)
iNum += 14;
else if((int)strData.find("fifteen") >= 0 || (int)strData.find("FIFTEEN") >= 0)
iNum += 15;
else if((int)strData.find("sixteen") >= 0 || (int)strData.find("SIXTEEN") >= 0)
iNum += 16;
else if((int)strData.find("seventeen") >= 0 || (int)strData.find("SEVENTEEN") >= 0)
iNum += 17;
else if((int)strData.find("eighteen") >= 0 || (int)strData.find("EIGHTEEN") >= 0)
iNum += 18;
else if((int)strData.find("nineteen") >= 0 || (int)strData.find("NINETEEN") >= 0)
iNum += 19;
else
return false;
return true;
}