2016-05-04 7 views
-2

So wie der Titel impliziert, habe ich ein Problem mit meinem Algorithmus verwendet, um numerische Werte in Zeichenfolgen zu konvertieren. Ich kann einen bestimmten Betrag erreichen, aber dann stürzt das Programm ab, wenn ich 100 Dollar trage. Ich bin auch ein paar Cent auf einige Werte, also frage ich mich, was ich tun könnte, um das auch zu ändern.Problem mit der Umwandlung von numerischen Werten in String-Elemente

Hier ist meine Header-Datei

#include <sstream> 
#include <iostream> 
#include <iomanip> 
#include <string> 
#include <string.h> 
using namespace std; 

class TextVersionOfNumber 
{ 
private: 
    double amount; 
public: 
    string getTextVersionOfNumber(); 
    void setAmount(double); 
}; 

Hier meine CPP-Datei (dies ist, wo der Algorithmus)

#include "TextVersionOfNumber.h" 


string TextVersionOfNumber::getTextVersionOfNumber() 
{ 
    string upto20[20] = { "", "one", "two", "three", "four", 
     "five", "six", "seven", "eight", "nine", "ten", 
     "eleven", "twelve", 
     "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", 
     "eighteen", "nineteen" }; 

    string ten_ninety[10] = { "", "", "twenty", "thirty", "forty", 
     "fifty", "sixty", "seventy", "eighty", "ninety" }; 

    double _amount1 = (int)amount; 
    double _amount2 = (amount - _amount1) * 100; 

    string str_one = ""; 

    if (_amount1 <= 19) 
    { 
     str_one = upto20[(int)_amount1]; 
    } 
    else 
    { 
     int tens = _amount1/10; 
     int ones = _amount1 - (tens * 10); 
     str_one = ten_ninety[tens] + upto20[ones]; 
    } 

    string str_two = ""; 

    if (_amount2 <= 19) 
    { 
     str_two = upto20[(int)_amount2]; 
    } 
    else 
    { 
     int tens = _amount2/10; 
     int ones = _amount2 - (tens * 10); 
     str_two = ten_ninety[tens] + upto20[ones]; 
    } 

    string ret_val = "$ " +str_one + " and " + str_two + " cents"; 
    system("pause"); 
    return ret_val; 
}; 



void TextVersionOfNumber::setAmount(double _amount) 
{ 
    amount = _amount; 
}; 

Und hier ist die Tester-Datei (dies von meinem Lehrer zur Verfügung gestellt wurde

)
// Chapter 12-- Assignment 14: Check Writer 
// This program can convert a dollar and cents amount given in 
// numerical form to a word description of the amount. 
#include <iostream> 
#include <iomanip> 
#include <string> 
#include <string.h> 
using namespace std; 

#include "TextVersionOfNumber.h" 
// Assume a maximum amount of $10,000 

int main() 
{ 
    string date = "03/05/2016", payee = "Michael Wille"; 
    TextVersionOfNumber checkAmount; 
    double testAmounts[] = { 0, .01, .25, 12, 12.45, 19, 19.02, 
     19.45, 20, 20.45, 
     34, 56.78, 100, 109, 119.78, 
     450, 678.90, 1000, 1009.45, 1056, 
     1234, 1567.98, 9999, 9999.99 }; 

    for (int i = 0; i < sizeof(testAmounts)/sizeof(double); i++) 
    { 
     double an_amount = testAmounts[i]; 
     checkAmount.setAmount(an_amount); 
     cout << setprecision(2) << fixed; 
     cout << setw(60) << right; 
     cout << "Date: " << date << endl; 
     cout << "Pay to the order of: " << payee << "\t\t\t"; 
     cout << "$" << an_amount << endl; 
     cout << checkAmount.getTextVersionOfNumber() << endl; 
     cout << "---------------------------------------------------------------------\n"; 
    } 
    system("pause"); 
    return 0; 
} 
+0

Ich weiß, dass ein Teil des Problems innerhalb meines ten_ninety-Arrays liegt, aber alles, was ich versucht habe, hat das Problem nicht behoben. –

+0

Wenn die Menge 100 ist, dann ist "tens" 10, Ihre 'ten_ninety' -Array-Größe ist 10 und Sie greifen auf ein Element hinter Ihrem Array zu, wenn Sie' ten_ninety [tens] 'sagen, da der Bereich 0 bis arraysize-1 ist wäre 9. –

+4

Es klingt wie Sie möglicherweise lernen müssen, wie man einen Debugger benutzt, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: ** [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

Antwort

2
else 
    { 
     int tens = _amount1/10; 
     int ones = _amount1 - (tens * 10); 
     str_one = ten_ninety[tens] + upto20[ones]; 
    } 

wenn betrag = 100, dann sind Zehner gleich 10, die Sie als Referenz in einem Array von 10 Elementen verwenden, die außerhalb der Grenzen des Arrays liegen. Ihr Code könnte funktionieren < 100, aber sobald es hundert trifft, wird es nicht mehr funktionieren.

+0

Würden Sie mir empfehlen, Int Hunderten zu erstellen, oder gibt es einen anderen Ansatz, den ich übersehen habe? (Ich frage nicht nach Antworten, sondern versuche nur in die richtige Richtung gelenkt zu werden) –

+0

@MichaelWille Ich würde mit der eigenen Ziffer beginnen (Betrag% 10) und den Wert von dort aufarbeiten. – Aumnayan

Verwandte Themen