Effektviste Möglichkeit vom Anfang eines Strings zu löschen
-
das ist in meinen augen der falsche weg, den du da nimmst...
wieso gibt print die führenden nullen mit aus?und auf ein if mehr oder weniger kommts dann auch nicht mehr an?!
vermutlich würde ich ein remove_if nehmen - wäre aber nicht sonderlich effektiv... wenns doch schnell sein sollte, dann in etwa so:
void erase_leading_zeros(std::string& value) { std::string::size_type index = value.find_first_not_of('0'); if(index == 0) return; if(index == std::string::npos) { value = '0'; return; } value.erase(value.begin(), value.begin()+index); }
bb
-
Wenn dich das Entfernen der Nullen nur bei der Ausgabe interessiert, ist SideWinders Vorschlag wohl der beste. Du brauchst dann ja nicht den string selbst zu verändern.
-
repräsentiert eine große Zahl (deutlich größer als 2^64,
GNU Multiple Precision Arithmetic Library, the fastest bignum library on the planet
Und ansonsten: ich wuerde mit string::substr() arbeiten.
-
ich würde boost::algorithm::trim_left_if verwenden.
-
string erase schrieb:
Hallo.
Ich hab einen sehr langen std::string, der eine Zahl repräsentiert. Dieser hat eine fixe Länge und enthält deshalb führende Nullen (aber niemals Länge 0). Nun wollte ich eine Ausgabefunktion schreiben, die den String so verändert, dass die führenden Nullen wegfallen.Oder Du gehst das Problem tiefer an.
a) (nicht men Freund) Du nimmst nicht string, sondern scheibst Dir eine Klasse, die schnell vorne löschen kann.
b) (mag ich) Du speicherst im string die Zahlen alle andersrum, also statt 1024="00001024" lieber 1024="42010000". Den ganzen Berechnungsalgos macht das wenig aus, aber man kann immer schnell schnippeln.
-
Der Vorteil von b) ist, das gleichwertige Digits an gleicher Position in den Strings stehen, egal wie lang so ein String ist.
-
Versuche es einfach in ANSI-C mit strcpy(string,""); - dann ist der String leer. Mit der Standardklasse 'string' von C++ gibt es vergleichbares. Wo ist das Problem?
Müssen wir hier wirklich die Grundlagen der Programmierung diskutieren? :p
-
berniebutt schrieb:
Versuche es einfach in ANSI-C mit strcpy(string,""); - dann ist der String leer.
Oder besser mit *string='\0';
berniebutt schrieb:
Mit der Standardklasse 'string' von C++ gibt es vergleichbares.
Ja.
berniebutt schrieb:
Wo ist das Problem?
Keiner wollte den string einfach nur leeren.
berniebutt schrieb:
Müssen wir hier wirklich die Grundlagen der Programmierung diskutieren? :p
Diese Frage scheint mir mehrere Bedeutungen zu haben. Diskutieren müssen wir die Grundlagen schon. Immer wieder. Aber nicht in diesem Thread, fürchte ich. Zum Beschimpfen der Anfänger hat Marc++us mich engagiert. Diese Mühe kannst Du Dir sparen, wenn Du Lust hast. Natürlich bin ich über deine tatkräftige Hilfe auch dankbar. Aber auch vielleicht besser in anderen Threads. Hier http://www.c-plusplus.net/forum/viewtopic-var-t-is-262340-and-highlight-is-.html wäre toll.
-
volkard schrieb:
string erase schrieb:
Hallo.
Ich hab einen sehr langen std::string, der eine Zahl repräsentiert. Dieser hat eine fixe Länge und enthält deshalb führende Nullen (aber niemals Länge 0). Nun wollte ich eine Ausgabefunktion schreiben, die den String so verändert, dass die führenden Nullen wegfallen.Oder Du gehst das Problem tiefer an.
a) (nicht men Freund) Du nimmst nicht string, sondern scheibst Dir eine Klasse, die schnell vorne löschen kann.
b) (mag ich) Du speicherst im string die Zahlen alle andersrum, also statt 1024="00001024" lieber 1024="42010000". Den ganzen Berechnungsalgos macht das wenig aus, aber man kann immer schnell schnippeln.Naja man kann sich auch einfach den Offset merken.
struct my_string { std::string m_str; size_t m_offset; char const* c_str() const { return m_str.c_str() + m_offset; } };
Ich meine nur WENN man schon selbst was programmieren will. Macht aber alles nicht wirklich Sinn.
-
volkard schrieb:
berniebutt schrieb:
Müssen wir hier wirklich die Grundlagen der Programmierung diskutieren? :p
Diese Frage scheint mir mehrere Bedeutungen zu haben. Diskutieren müssen wir die Grundlagen schon. Immer wieder. Aber nicht in diesem Thread, fürchte ich. Zum Beschimpfen der Anfänger hat Marc++us mich engagiert. Diese Mühe kannst Du Dir sparen, wenn Du Lust hast. Natürlich bin ich über deine tatkräftige Hilfe auch dankbar. Aber auch vielleicht besser in anderen Threads. Hier http://www.c-plusplus.net/forum/viewtopic-var-t-is-262340-and-highlight-is-.html wäre toll.
War nicht als Beschimpfung gemeint, der Rüffel ist berechtigt. Natürlich sollen und müssen wir Anfängern auch Grundlagen erklären, wenn sie an einer Stelle hängenbleiben. Shame on me - ich verspreche, mich zu bessern!