Von [12345abc678] nur die Zahle -> [12345678] ???
-
Wie kann auch ich folgendes so auseinander nehmen, dass in meine Variable nur die Zahlen aufgenommen werden, und die Buchstaben/Zeichen auf der strecke bleiben?
[12345abc678] –zu-> [12345678]Wäre nett wen jemand ein Beispiel hätte, wie er das lösen würde.
Gruß,
Dino
-
char array durchgehen und nur kopieren wenn char zwischen 0 und 9

-
Hallo,
da du wenig Angaben gemacht hast, nehme ich jetzt einfach mal an, ich bekomme diese Zahlen-Buchstabencombo als std::string.
Hier also n gaaanz simpler Ansatz:
#include <string> #include <cstring> std::string killLetters(const std::string &s) { std::string ret(""); for (int i=0;i<s.size();++i) { if (isdigit(s[i])) ret.append(s[i]); } return ret; };EDIT: Ein wenig zu lahm gewesen...
MfG
GPC
-
Also... erst einmal noch die DATEN...
-------------
Windows XP
Konsolen Anwendung
Sprache: C++
Programm: Visual C++ 6
-------------So, jetzt an welcher stelle ich hängen bleibe....
Beispiel:
#include <iostream> using namespace std; int Zahl; main() { cin >> Zahl; // Z. B. 12345abc678 cin.sync(); cin.clear(); cout << Zahl; // Ausgabe: 12345 return 0; }Weiter Weiß ich nicht... Ich wusste dass man mit 'int' nur die Zahle raus bekommt. Und die Buchstaben/Zeichen im Puffer verbleiben.
Das Problem ist nur, dass die Zahlen bis zum ersten Buchstaben/Zeichen eingelesen werden.
-
Dino Crisis schrieb:
Das Problem ist nur, dass die Zahlen bis zum ersten Buchstaben/Zeichen eingelesen werden.
Deswegen musst du statt eines ints einen string einlesen:
#include <iostream> #include <string> #include <cctype> #include <algorithm> #include <functional> using namespace std; int main() { string Zahl; cin >> Zahl; Zahl.erase(remove_if(Zahl.begin(), Zahl.end(), not1(ptr_fun(isdigit))), Zahl.end()); cout << Zahl; }
-
Jaa... es klapt.. danke dir finix...
Ich weiß nur nicht warum es klapt...

Kann mir eventuel jemand diese Zeile Erklären?
cin >> Zahl; //-------------------------------------------------------------------------------------- Zahl.erase(remove_if(Zahl.begin(), Zahl.end(), not1(ptr_fun(isdigit))), Zahl.end()); //--------------------------------------------------------------------------------------Z. B. Was bedeutet das: 'isdigit' ?
Kann mir eventuel jemand einen Link zur behandlung "dieser/solcher" Funltionen geben?
Herzlichen Danke....
Dino
-
das ist ungefähr das gleiche wie GPC gepostet hat..
-
Erkäre mir lieber deine Wunderzeile... :p
-
Dino Crisis schrieb:
Kann mir eventuel jemand diese Zeile Erklären?
cin >> Zahl; //-------------------------------------------------------------------------------------- Zahl.erase(remove_if(Zahl.begin(), Zahl.end(), not1(ptr_fun(isdigit))), Zahl.end()); //--------------------------------------------------------------------------------------Jedes zeichen welches keine (not1) Ziffer (isdigit) ist wird ans Ende des Strings verschoben (remove_if), danach dieser ganze Bereich von Nichtziffern gelöscht (erase).
Dino Crisis schrieb:
Kann mir eventuel jemand einen Link zur behandlung "dieser/solcher" Funltionen geben?
-
Habe gearde noch ein mehr oder weniger Problem. Es gibt doch einen "get.lenth" operator (oder so ähnlich) womit ich die Länge von z. B. dem String 'Zahl' herausbekomme.
Wie sätz ich den ein. (Falls es den gibt)
Kurz:
Wie kann ich die länge vom String 'Zahl' Anzeigen lassen.
-
std::string foo = "blub"; std::cout << foo.length(); // gibt 4 aus
-
OK, Danke...
-
geht das auch nicht ganz einfach mit
atoi()??

-
ManPage von <a href= schrieb:
man: atoi">atoi does no overflow checking, handles unsigned numbers poorly, and handles strings containing trailing extra characters (like ``123abc'') poorly.
Ist also nicht so gut geeignet.