Ich helfe einem Freund mit einer C++ Zuordnung. Es gibt ein Problem mit der folowing Basiskonverterfunktion:Problem mit Basiskonverter-Funktion
#include <iostream>
#include <cmath>
using namespace std;
int strToInt(string num, unsigned base){
int result = 0;
for (int i=0; i<num.length(); i++) {
if (num[i]>='0' && num[i]<='9')
result += (num[i]-'0')*pow(base,num.length()-i-1);
else if (num[i]>='A' && num[i]<='F')
result += (num[i]-'A'+10)*pow(base,num.length()-i-1);
else if (num[i]>='a' && num[i]<='f')
result += (num[i]-'a'+10)*pow(base,num.length()-i-1);
}
return result;
}
int main()
{
string number;
int base;
while(number.compare("exit")!=0){
cin>>number;
cin>>base;
cout<<strToInt(number,base)<<"\n\n";
}
return 0;
}
Aus irgendeinem unerklärlichen Grunde jedesmal, wenn ich eingeben 3 und 5-stellige Dezimalzahlen und wählte Basis 10 ich die richtige Anzahl bin immer -1.
z.
100
10
99
10000
10
9999
Ich habe für die letzten 5-6 Stunden über diese Funktion wurde zu gehen und alle Arten von Debug-Code hinzufügen, sondern für das Wohl von mir, ich kann nicht herausfinden, was zum Teufel ist falsch.
Code-Stil Bemerkungen werden auch sehr geschätzt.
Prost
@latedeveloper guten Punkt, um die magische Zahl. Viel besser lesbar. Allerdings sehe ich keinen Unterschied zwischen == und vergleichen(). Was meinen Sie, indem Sie den Rückgabewert testen? Validierung? Das ist keine Voraussetzung für die Aufgabe. Danke für die Rückmeldung. –
Haben Sie versucht, Ihren Code mit einem Debugger zu durchlaufen? Debugger ist ** das ** Werkzeug, das verwendet wird, wenn der Code sich nicht korrekt verhält. –
Ich kann nicht reproduzieren; mit Ihrer Eingabe bekomme ich 100-10-100 und 10000-10-10000 –