[Hilfe] Suchen nach 10stelliger zahl in Text
-
Hallo,
ich wollte mal eure Meinung einholen wie ihr in einem Text am schnellsten und am schonensten einen code/string sucht der immer 10 stellen hat und nur aus zahlen besteht z.b.
009asbdfap9usdfha9sdfuasdfa9shf9876503864a98sdbf98abdasd
ich wäre so vorgegangen in dem ich alle stellen durchgehe und wenn eine zahl gefunden ist prüfen ob die darauf folgenden 9 stellen auch zahlen sind? aber ist etwas aufwendig wie ich finde vll habt ihr eine bessere Idee...
MFG
-
EDIT: Mißverständnis.
-
Caligulaminus schrieb:
string::find()
http://www.cplusplus.com/reference/string/string/find/Falsch. Ich weiß nicht ob du das richtige Meinst (wahrscheinlich nicht), aber jede beliebige Kombination von Zahlenfolgen zu nehmen und sie in string::find zu stecken und zu sehen was passiert ist ziemlich langsam.
Da ist seine Version die einfachere.
-
C++Guid schrieb:
ich wäre so vorgegangen in dem ich alle stellen durchgehe und wenn eine zahl gefunden ist prüfen ob die darauf folgenden 9 stellen auch zahlen sind? aber ist etwas aufwendig wie ich finde vll habt ihr eine bessere Idee...
So ähnlich vielleicht: stattdessen nur in 10er Schritten durch den Text springen und wenn bei jedem Fundort einer Zahl in beide Richtungen versuchen den Match auf 10 Stellen zu erweitern.
-
Ich vermute mal, du willst alle solche Stellen haben und diese nacheinander verarbeiten, oder?
string eingabe; int counter = 0; for(size_t i = 0; i != eingabe.size(); ++i){ if(isZahl(eingabe[i])) ++counter; else counter=0; if(counter >= 10){ //alles von position i-9 bis position i ist ein Zahlencode. hier verarbeiten... } }
-
n schrieb:
C++Guid schrieb:
ich wäre so vorgegangen in dem ich alle stellen durchgehe und wenn eine zahl gefunden ist prüfen ob die darauf folgenden 9 stellen auch zahlen sind? aber ist etwas aufwendig wie ich finde vll habt ihr eine bessere Idee...
So ähnlich vielleicht: stattdessen nur in 10er Schritten durch den Text springen und wenn bei jedem Fundort einer Zahl in beide Richtungen versuchen den Match auf 10 Stellen zu erweitern.
Edit: sry, richtig!
-
bool first_arg_is_digit(char c, char) { return isdigit(c); } int main() { std::string guid = "009asbdfap9usdfha9sdfuasdfa9shf9876503864a98sdbf98abdasd"; std::string::iterator pos = std::search_n(guid.begin(), guid.end(), 10, '\0', first_arg_is_digit); std::cout << guid.substr(pos-guid.begin(), 10) << std::endl; }
-
otze schrieb:
Ich vermute mal, du willst alle solche Stellen haben und diese nacheinander verarbeiten, oder?
string eingabe; int counter = 0; for(size_t i = 0; i != eingabe.size(); ++i){ if(isZahl(eingabe[i])) ++counter; else counter=0; if(counter >= 10){ //alles von position i-9 bis position i ist ein Zahlencode. hier verarbeiten... } }ja genau nur is die frage ob es nicht eine funktion gibt, die gleich an die besagte stelle springt oder mit die stelle zurrückgibt...? und das alles am besten mit einfachen winapis
MFG
-
C++Guid schrieb:
und das alles am besten mit einfachen winapis
Bitte was?
@westerwello: bitte std:: vor isdigit schreiben, wenn auch vor alles andere.
Und ab C++11 könnt' man da auch Lambdas benützen.
-
*benutzen
-
314159265358979 schrieb:
*benutzen
nein, das war schon richtiges Deutsch.
http://de.wiktionary.org/wiki/benützen
=> Grammarnazi-Fail.
-
Wenn ich etwas kann, dann ist es Deutsch. Dein Artikel gibt mir im Übrigen Recht.
-
* Hacker hat zwei Rechtschreibfehler drin.
* 314159265358979 hat einen Rechtschreibfehler drin.Stand: 17:57:26.
-
Edit: Blödelsinn
-
Ich hab nirgens 'nen Rechtschreibfehler drin'.
-
314159265358979 schrieb:
Ich hab nirgens 'nen Rechtschreibfehler drin'.
Hast Recht, dacht' ich nur. Ich hab benützen übrigens absichtlich geschrieben.
-
* Übrigen gross zu schreiben war schon richtig, aber recht haben schreibt man klein.
* drin hat kein Apostroph.
-
314159265358979 schrieb:
Wenn ich etwas kann, dann ist es Deutsch. Dein Artikel gibt mir im Übrigen Recht.
gibt er dir nicht. "benützen" ist ein Synonym für "benutzen". Die Schreibweise ist auch richtig, da an der Stelle ein Infinitiv gehört. Also gibt dir der Artikel genau nirgendwo recht und das mit deutsch können...

-
Das Verb "benützen" ist nur die nachträglich angenommene Version des Wortes "benutzen", da viele Leute zu blöd sind, die Deutsche Sprache zu lernen. Deal with it.
-
Grammarnazi schrieb:
* Übrigen gross zu schreiben war schon richtig, aber recht haben schreibt man klein.
* drin hat kein Apostroph.*Nein. "Ich gebe dir Recht" heißt, ich gebe dir etwas. Und dieses etwas ist das Recht.
*"Drin" ist die Abkürzung für drinnen. Ist also richtig.
-
314159265358979 schrieb:
da viele Leute zu blöd sind, die Deutsche Sprache zu lernen.
* Deutsche schreibt man klein.
* Ich sage und schreibe bewusst "benützen" und ich bin stolz drauf.
* @Hacker: Du hast keine Ahnung.