将数字转换为文本时出错

时间:2013-02-06 15:34:55

标签: c++

我正在编写一个将数字转换为文本的c ++程序。

我遇到两个问题(编辑:现在只有一个):

  • 第一个问题是程序只写出数字为1-19正确,一切从20-99开始,例如我写34时的例子,我得到的answear是三十而不是三十四,因为它应该。三十岁之后,它就会出现错误并且程序关闭。 [问题已解决]

  • 第二个问题是我希望我能在0-999而不仅仅是99之间写数字但我不知道该怎么做

     #include <iostream>
     #include <string>
     using namespace std;
    
    
    int main()
      {
     int num, Ldight, Rdight;
    
        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","fourty","fifty", "sixty","seventy","eighty", "ninety"};
    
    
        cout << "Pick a number between 1-99: ";
        cin >> num;
    
          if(num <= 0)
              {
            cout << "ERROR!" << endl;
              }
    
       else if (num >= 0 && num <= 19)
              {
    cout << "Your number is: " << ones[Rdight] ;
              }
    
       else if (num >=20 && num <=99)
        {
    Rdight = num % 10;
    Ldight = num / 10;
    
    cout << "Your number is: " << tens[Ldight - 2] << ones[Rdight];
         }
    
    return 0;
    }
    

4 个答案:

答案 0 :(得分:3)

你应该改变这个:

cout << "Your number is: " << tens[Ldight - 2] << ones[num];

cout << "Your number is: " << tens[Ldight - 2] << ones[Rdight];

您计算一个您从未使用过的值。并且在ones以上的行中,num访问索引越界。

答案 1 :(得分:1)

对于您的第一个问题,您的问题就在这一行:

cout << "Your number is: " << tens[Ldight - 2] << ones[num];

您正在使用错误的变量,尽管正确计算了上面一行中的值。我不是在告诉你如何修复它,因为你是一个学习编程,你需要学习如何发现这类问题。

[我个人会将两个虚拟字段添加到“十位”,因此您不必执行-2 - 这是一个很小的代价]。

至于你的第二个问题,你将不得不考虑如何说出来,你可能会想出一些东西......与解决单个数字并没有什么不同,让我们说。如果你需要超过六个左右的线,你就错了。

一旦你解决了数百个问题,只需几行额外的代码就能增加数百万甚至更多的数字,这将是非常微不足道的。

答案 2 :(得分:0)

使用以下行:

cout&lt;&lt; “你的号码是:”&lt;&lt;数十[Ldigit - 2]&lt;&lt;那些[<强> Rdigit-1 ];

因为你输出为错误,当i / p <= 0时,不需要[0]中的元素“0”,所以删除元素“0”

答案 3 :(得分:-1)

您可以尝试将用户输入拆分为2件。 如果用户输入为:55,则将其拆分为5和5,然后打印

数十[5] +个[5]

这将是更好的解决方案。 您将删除所有可能导致问题的if-s