Converting a numeric date to written english

Posted on 2002-03-22
Last Modified: 2010-04-02
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,

Question by:96gtjeff
LVL 30

Expert Comment

ID: 6890375
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
LVL 16

Accepted Solution

Peter Kwan earned 100 total points
ID: 6890509
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.

Author Comment

ID: 6890513
Thank you very much...this oughta do it.
LVL 84

Expert Comment

ID: 6890517

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Unlike C#, C++ doesn't have native support for sealing classes (so they cannot be sub-classed). At the cost of a virtual base class pointer it is possible to implement a pseudo sealing mechanism The trick is to virtually inherit from a base class…
Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

943 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now