[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 325
  • Last Modified:

Converting a numeric date to written english

Hey guys, I am writing a program that will accept a date in the MM/DD/YYYY format and return it in written english...EX: March Fifth, Two Thousand Two

I have the program working from 1990 through now, including filtering out erroneous dates...such as the 29th of February on a non-leap year.  So far I have been converting everything through a CASE SWITCH statement

EX:  CASE 1990: return "nineteen-ninety";

Here's the problem...I want this program to perform this function at least back to 1900...or earlier would be better.  I cannot figure out a way to write these year statements without typing out every single year that I want to have available.  What would be a good way of going about this?

Thanks in advance,

Jeff
0
96gtjeff
Asked:
96gtjeff
1 Solution
 
AxterCommented:
You could just make a string for each two digit number from 0 to 19.
Then use a dual algrithm to come up with the numbers from 20 to 99
0
 
Peter KwanCommented:
First, you need to define some constant "roots" (or you may say elements) for each digit except 0.

1: one
2: two, twen (<- twenty)
3: three, thir (<- thirteen, thirty)
4: four, for (<-forty)
5: five, fif (<-fifty, fifteen)
6: six
7: seven,
8: eight, eigh (<- eighty, eighteen)
9: nine
10: ten
1000: thousand
10+a (2<a<10): teen
10*a (1<a<10): ty

The parathesis with <- is/are the cases where the "root" is used.

Next, define some constant strings for the following exceptional cases:
00: hundred
11: eleven
12: twelve

Then you need to define some rules (where y=input year, and the content inside parenthesis is just for human explanation only, not for coding):

=====================================================
Case A)
y/100==19 (=> 9 + 10)
=> "nine" + "teen"; n=y-1900;

n==0 (=> 00)
=> "-hundred"
0<n<13 => + "-and-" + (direct translation of n)
13<=n<=19 => "-" + (translation of n-10) + (direct translation of (10+a))
2<=n<=9 && n%10==0 => "-" + (translation of n/10) + (direct translation of (10*a))
2<=n<=9 && n%10!=0 => "-" + (translation of n/10) + (direct translation of (10*a)) + "-" + (direct translation of n%10)
=====================================================
Case B)
y>=2000 (=> 2 * 1000)
=> "two" + "-" + "thosand" + "-" + "and-"; n=y-2000;
0<n<13 => + (direct translation of n)
13<=n<=19 => (translation of n-10) + (direct translation of (10+a))
2<=n<=9 && n%10==0 => (translation of n/10) + (direct translation of (10*a))
2<=n<=9 && n%10!=0 => (translation of n/10) + (direct translation of (10*a)) + "-" + (direct translation of n%10)
=====================================================

This is just a pseudocode. You need to translate to
C++ using conditionals.
0
 
96gtjeffAuthor Commented:
Thank you very much...this oughta do it.
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now