This is an array string problem where I have to ask for a sentence input that includes an integer (between 0 and 9), then the program has to change that integer to its name in words.

Like: This is test 3.

Would say: This is test three.

My program does it, but it includes many nested if statements, so I want to know if there is a shorter way to do it. Also, can I do it for any sentence length?
Or do I have to tell the user how long it has to be?

For this program i did it as if the user is going to enter a sentence 6 words long or less!

#include <cstdlib>
#include <iostream>
#include <string>
#include <iomanip>

using namespace std;

int main(int argc, char *argv[])

int size=6;

   string sentence[size];
   string done;

  cout<<"enter a sentence that includes a number:"<<endl;
  for (int n=0; n<size; n++)

   for(int i=0; i<size; i++)
   if (sentence[i]=="0")
           if (sentence[i]=="2")
             { sentence[i]="two";
                { if (sentence[i]=="3")
                       if (sentence[i]=="4")
                                    if (sentence[i]=="7")

            cout<<sentence[i]<<" ";


    return EXIT_SUCCESS;

Recommended Answers

All 10 Replies

You could do it with a switch/case statement...

You can avoid nested if statements with the else if clause:

if ( sentence[i] == '0' )
else if ( sentence[i] == '1' )
else if ( sentence[i] == '2' )
else if ( sentence[i] == '3' )
else if ( sentence[i] == '4' )
else if ( sentence[i] == '5' )
else if ( sentence[i] == '6' )
else if ( sentence[i] == '7' )
else if ( sentence[i] == '8' )
else if ( sentence[i] == '9' )

Or with a switch statement:

switch ( sentence[i] ) {
case '0': cout<<"zero"; break;
case '1': cout<<"one"; break;
case '2': cout<<"two"; break;
case '3': cout<<"three"; break;
case '4': cout<<"four"; break;
case '5': cout<<"five"; break;
case '6': cout<<"six"; break;
case '7': cout<<"seven"; break;
case '8': cout<<"eight"; break;
case '9': cout<<"nine"; break;

Alternatively, a table based approach is generally easier to get right:

string number[] = {

cout<< number[sentence[i] - '0'];

Thank you very much!

I am going to try this!

It really is much shorter than my long nested if statements!



Isn't this supposed to be:
if ( sentence[0] == '0' )
else if ( sentence[0] == '1' )

you have:
if ( sentence == '0' )

You want to compare the first character. The sentence is a string not a character.

Same thing with this:
switch ( sentence )
should be:
switch ( sentence[0] )

(It's nice to be able to correct you once instead of the opposite)..

You are rigth!

I tried to work with the switch statement without the two brakets and it did not work.

However, tell me when how do you refer to
this statement:


Does the second braket hold any value or not, its just that two dimensional arrays confuse me a little so i am not sure if both brakets chage value or not?

I can't believe Narue hasn't commented on this...

In the OP sentence was declared thus:

string sentence;

Therefore, in the syntax used by the OP sentence is an array of string of size size. Therefore to refer to a given char of a given string you would need to use multidimensional []s. However, why use that syntax? It's much easier to just use:

string sentence;

and then use the routine single dimension [] to refer to a given char within sentence. This is what Narue apperas to have to used in her demonstrations.

The point of the post/original question was how to convert the value of a given char or a given int into a word of English. The techniques presented can be modified to whatever syntax you need/wish.

Also note, in the OP, that

int size = 6;
string sentence;

is illegal as the size of a static array needs to be specified using a constant value, not a variable. To use a variable to declare memory for an array you must use dynamic memory, not static. This is just another reason to use a single string, not an array of strings. And again, since it wasn't the meat of the question, it is more for your education, than to answer the original question.

>I can't believe Narue hasn't commented on this...
Narue has a day job that saps a lot of her time. :rolleyes: Anyway, any similarity between my examples and a complete solution is purely coincidence. If any code that I post doesn't compile, then chances are good that the intention was to convey an idea, and it's your job to integrate the idea into your code. ;)

(I'll let it slip this time... )

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.