将数字转换为文本时出错

Error with converting numbers to text

本文关键字:出错 文本 数字 转换      更新时间:2023-10-16

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

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

  • 第一个问题是,程序只写1-19的正确数字,从20-99的所有数字,比如当我写34的时候,我得到的答案是30,而不是应该的34。30之后,只会出现错误,程序就会关闭。[问题已修复]

  • 第二个问题是,我希望我能写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;
    }
    

您应该更改以下内容:

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

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

你计算了一个你从未使用过的值。并且在ones上面的行中,num访问索引超出了界限。

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

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

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

[我个人会在"tens"中添加两个伪字段,这样你就不必再做-2了——这是一个很小的代价]。

至于你的第二个问题,你必须考虑如何表达,你可能会想出一些。。。比方说,这与求解个位数没有太大区别。如果你需要超过六行左右的线路,你就解决错了。

一旦你解决了数百个问题,只需几行额外的代码,就可以将数字添加到数百万,甚至更多。

使用以下行:

cout<lt;"您的号码是:"<lt;十位数[Ldigital-2]<lt;一个[Rdigit-1];

ones[]中不需要元素"zero",因为当i/p<=0,因此删除元素"零"

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

十[5]+一[5]

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