将 3 位数字转换为单词C++
Converts 3 digit numbers to words C++
#include <string>
using namespace std;
int main()
{
int num,
leftDigit,
rightDigit;
string ones[] = { "Zero",
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten",
"Eleven",
"Twelve",
"Thirteen",
"Fourteen",
"Fifteen",
"Sixteen",
"Seventeen",
"Eighteen",
"Nineteen",
};
string tens[] = { "Twenty",
"Thirty",
"Forty",
"Fifty",
"Sixty",
"Seventy",
"Eighty",
"Ninety",
};
cout << "Enter a Number " ;
cin >> num;
if (num <=0 || num >=100 )
{
cout << "the Number is not Between 1-99" << endl;
}
else if (num >= 1 && num <= 19)
{
cout << "The Number you have entered is " << ones[num] << endl;
}
else if (num >= 20 && num <= 99)
{
leftDigit = num / 10;
rightDigit = num % 10;
cout << "the Number you have entered is " << tens[leftDigit - 2] << " " << ones[rightDigit] << endl;
}
system("PAUSE");
return 0;
}
我一直在玩数字到单词,并找到了一种简单的方法来做 2-1-99 的任何数字。
有什么方法可以扩展我当前的代码以允许 3 位数字并允许数字 1-999,这有多容易?
您可以使用递归处理更大的数字。利用该程序已经适用于 2 位数字的事实,用 num = num / 100
解析百位数字,并将余数r = num % 100
传递给您创建的函数。只需一点工作,您就可以处理任何长度的数字。
这应该可以解决问题:
#include <string>
#include <iostream>
using namespace std;
string ones[] = { "",
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten",
"Eleven",
"Twelve",
"Thirteen",
"Fourteen",
"Fifteen",
"Sixteen",
"Seventeen",
"Eighteen",
"Nineteen",
};
string tens[] = { "Twenty",
"Thirty",
"Forty",
"Fifty",
"Sixty",
"Seventy",
"Eighty",
"Ninety",
};
string hundred = "Hundred";
string thousand = "Thousand";
string million = "Million";
string intToWord(int num)
{
if (num >= 1000000 && num < 1000000000)
{
int first = num / 1000000;
return intToWord(first) + " " + million + " " + intToWord(num - first * 1000000);
}
else if (num >= 1000)
{
int first = num / 1000;
return intToWord(first) + " " + thousand + " " + intToWord(num - first * 1000);
}
else if (num >= 100)
{
int first = num / 100;
return ones[first] + " " + hundred + " " + intToWord(num - first * 100);
}
else if (num >= 20)
{
int leftDigit = num / 10;
int rightDigit = num % 10;
return tens[leftDigit - 2] + " " + ones[rightDigit];
}
else if (num >= 0)
{
return ones[num];
}
return "number too large or smaller than 1";
}
int main()
{
int num;
cout << "Enter a Number ";
cin >> num;
cout << endl << intToWord(num) << endl;
system("PAUSE");
return 0;
}
此代码经过测试并正常工作。如果需要,您可以进一步扩展它。它使用递归,这使得这变得非常容易。
此代码一直有效到 999999999。
这是SQL中的算法(抱歉(。dbo.NumberWord
表有 2 列:Number
和 WordEn
。该表包含数字 1 到 20 的英语单词,然后是 30、40、50、60、70、80 和 90。(一,二,...二十,三十,四十,...,九十(。
下面是递归 T-SQL 函数,调用该函数以将 1 到 999,000 之间的任何整数转换为英语单词:
CREATE FUNCTION [dbo].[fnNumberToEnglish] (@Number int)
RETURNS nvarchar(1024)
AS
BEGIN
DECLARE
@English nvarchar(1024) =
(SELECT CASE
WHEN @Number = 0 THEN ''
WHEN @Number BETWEEN 1 AND 19 THEN
(SELECT WordEn FROM dbo.NumberWord
WHERE Number = @Number)
WHEN @Number BETWEEN 20 AND 99 THEN
(SELECT WordEn FROM dbo.NumberWord
WHERE (Number / 10) = @Number / 10) + N'-' + dbo.fnNumberToEnglish(@Number%10)
WHEN @Number BETWEEN 100 AND 999 THEN
(dbo.fnNumberToEnglish(@Number / 100)) + N' Hundred ' + dbo.fnNumberToEnglish(@Number%100)
WHEN @Number BETWEEN 1000 AND 999999 THEN
(dbo.fnNumberToEnglish(@Number / 1000)) + N' Thousand ' + dbo.fnNumberToEnglish(@Number%1000)
ELSE
N' INVALID INPUT'
END);
SET @English = RTRIM(@English);
IF RIGHT(@English,1) = '-' BEGIN
SET @English = RTRIM(LEFT(@English, LEN(@English) - 1));
END
RETURN @English;
END
相关文章:
- 文本文件中的单词链表
- 在指针的帮助下,文本文件中单词的频率
- 如何根据单词在文本中出现的概率输出单词
- 从字符串变量中逐字符读取单词
- 使用std::mt19937从字符串中返回一个随机单词
- 如何用for循环在c++中生成单词三角形
- 将数字转换为单词
- 使用if-else将数字转换为单词
- C++-字符串是否包含一个带有简单循环的单词
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 3-3. 编写一个程序来计算每个不同单词在其输入中出现的次数
- C++为一串单词添加空格
- 在C++中查找(奇怪的)字符串中的单词
- 当字符串是某个单词时给出输出?
- 当您在此单词中搜索单词时调整字符数组的大小?
- 数每个单词的元音
- 我们如何在文本文件中找到C++中的几个单词?
- 使用 BFS 的单词梯 2
- 替换字符串中的单词,但忽略引号中的单词