Hilfe bei for-Schleife
-
Ok weils mein ist doch noch irgendwie fehlerhaft.
denn1019101710201021 - 101010101010
und das in der Schleife, also in dem Fall läuft die Schleife 3 mal durch, kommt bei mir -1765712469 raus, was irgendwie überhaupt nicht passt.werde es mal mit deiner for schleife probieren!
**/edit:
Es kommt immer noch nichts brauchbares bei raus.
so soll z.b. 102010201020 - 10101010 = -1.08922e+009 sein
**[red] Ok der Fehler liegt darin das meine Strings nicht richtig zu float konvertiert werden. zahl1i = atoi(zahl1.c_str()); was ist daran z.b. falsch?
zahl1 hat im string z.b. 10101010 und der schluesselwert ist 1.0101e+007 obwohl dieser auch 10101010 sein sollte![/red]
-
versuch die function atof anstat atoi
-
atof statt atoi bringt ebenfalls nichts:((
-
Wobei der Sinn deiner Schleife nicht ersichtlich ist, es sei denn du hast bisher noch nicht den vollständigen Code gepostet.
Warum man das gleiche Ergebnis mehrmals ausrechnen muss ist mir nicht ganz klar.
-
ja der restliche code is schon geschrieben, er soll das ergebnis ja auch net gleich mehrsmal ausrechen. er soll wenn man z.b. wie gesagt zahl1 eingibt, das wäre 10. zahl 10 ist 2 zeichen lang. zahl2 ist z.b. 4.
dann soll 2mal die 4 von 10 abgezogen werden also 10-4 ablaufen, dann i++ und nochmal 10-4. das wäre dann am ende 2. aber wie gesagt das problem liegt jeztt erstmal dabei einen string, der nur zahlen entählt, in einen integer umzuwandeln.
-
Das was in deiner for-schleife drinsteht verändert aber die Zahlen nicht. Auf diese Weise rechnest du immer das gleiche.
Bezüglich umwandeln von string in Zahl schau mal in die FAQ.
-
Ok hoffe mal, dass das dann klappen wird!
-
long long zahl1i=_atoi64(zahl1.c_str()); long long zahl2i=_atoi64(zahl2.c_str()); zahl1i-=zahl1.length()*zahl2i; std::cout << zahl1i;
-
Nanyuki vielen Dank für den Code, scheint zu klappen!! Vielen vielen dank!!
-
Stehe nun leider vor noch einem Problem, mir scheint es so als ob Strings nur eine bestimmte Größe hätten. Wenn ich einen Spring mit 18 Zeichen, also z.B.
888888888888888888 habe dann wird dieser auch richtig in einen int / long mit dem inhalt 888888888888888888 umgewandelt. wenn ich jetzt jedoch einen string mit dem inhalt 30303030303030303030 habe und diesen dann in einem long long haben will bekomme ich den wert -6590457844388800202 in "meinen long long " geliefert. Weiß jemand von euch, wodran das liegen könnte?Die physikalische Größe des Strings ist die Anzahl an gespeicherten Zeichen ohne eventuell vorhandenen Null-Terminator (Strings müssen ihre Daten nicht mit '\0' abschließen, außer zur Ausgabe durch c_str()). Die Größe kann über die Methoden size() und length() abgefragt (beide Methoden sind gleichwertig) und über resize(len,c) gesetzt werden - letzteres schneidet Zeichen am Ende ab bzw. füllt den String mit Kopien von c (Defaultwert ist '\0') auf, um die nötige Größe zu erreichen. Außerdem beeinflussen viele Stringmethoden, z.B. replace(), append() oder erase(), indirekt auch die Größe des Strings.
Die Kapazität des Strings ist die Zeichenzahl, die ohne Reallokation eingetragen werden kann. Sobald die Größe die Kapazität überschreitet, wird der gesamte Stringinhalt in einen neuen, größeren Block umkopiert und der alte Speicherblock freigegeben. Die Kapazität kann über die Methode capacity() abgefragt und über die Methode reserve(size) gesetzt werden. Im Gegensatz zu Vektoren, deren Kapazität NIE verkleinert wird, darf ein String auch in einen kleineren Speicherblock umziehen (allerdings nur auf Anforderung) - insbesondere bewirkt ein reserve() ohne Parameter eine Verkleinerung der Kapazität auf die aktuelle Größe.
Anmerkung: Es ist im Standard nicht garantiert, dass der String seine Kapazität verringern muss - er darf eine entsprechende Anforderung auch ignorieren. Umgekehrt ist es jedoch nicht erlaubt, dass der String aus eigenem Antrieb die Kapazität verkleinert. Der einzige Weg, garantiert die Kapazität eines Strings zu veringern, ist die Verwendung des sogenannten "swap-Tricks":
C/C++ Code:
void shrink(string& str)
{
string nstr(str.begin(),str.end());
str.swap(nstr);
}
C/C++ Code:
void shrink(string& str)
{
string nstr(str.begin(),str.end());
str.swap(nstr);
}
C/C++ Code:
void shrink(string& str)
{
string nstr(str.begin(),str.end());
str.swap(nstr);
}wie müsste das jetzt aussehen wenn ich z.b. einem string namens "zahl" die größt mögliche größe geben will?
mfg
-
long long ist 64 Bit lang.
Der maximale Wert ist:18446744073709551616 // maximal Darstellbare Wert von long long
888888888888888888
30303030303030303030 // das ist zu gross
-
Und wie kann ich des alles noch "größer" machen?^^ Oder geht das nicht?
-
tester schrieb:
Und wie kann ich des alles noch "größer" machen?^^ Oder geht das nicht?
Das geht nicht. Was du machen könntest eine eigene Zahlenklasse mit entsprechenden Operatoren zu schreiben, oder nach einer entsprechenden Bibliothek suchen.
cu André
-
Mist. Hoffe mal das ich das dann noch irgendwie schaffen werde, trotzdem thx an alle!