Suchen in einem String nach einer Zeichenkette ohne Rücksicht auf Groß und Kleinschreibung
-
Hi,
also ich habe ein Programm mit dem ich aus einer Datei auslese und dies in einen String speichere.
Ich möchte nach einer Zeichenkette SUCHEN. Dies klappt mir der Funktion strstr() hervorragend, jedoch ist hierbei die Groß und Kleinschreibung wichtig. Ich suche jetzt eine Funktion oder Möglichkeit mit der ich dasselbe wie strstr() machen kann nur, dass die Groß und Kleinschreibung in meiner Zeichenkette keine Rolle spielt.
Funktion zum Vergleichen (wie _strnicmp helfen mir hierbei wohl nicht)
Also hat jemand ne IDEE ???
THX schonma für Hilfe
Gruß
Manuel
-
zuerst beide arrays in kleinbuchstaben "verwandeln" und anschliessend nach string suchen?
mfG (c)h
-
chille07 schrieb:
zuerst beide arrays in kleinbuchstaben "verwandeln" und anschliessend nach string suchen?
mfG (c)h
Wäre ne Lösung.
Man könnte sich auch eine eigene Funktion dazu schreiben (vielleicht braucht man das ja mal wieder ;)), die den String zeichenweise durchgeht und, ohne auf Groß- Kleinschreibung zu achten, mit einem anderem String vergleicht.
-
Arbeitest wahrescheinlich an ner Input-Konsole, oder? Am besten du gehst jedes einzelne Zeichen per Schleife durch und checkst dann, ob das aktuelle Zeichen ein Kleinbachstabe ist. Dabei helfen dir die ascii-codes der zeichen à la:
if(input[i]>='a' && input[i]<='z') { int(input[i]) -= 32; }
Wenn das Zeichen ein Kleinbuchstabe ist, werden vom acsii-code 32 abgezogen, dann wird er zum Großbuchstabe...
P.S.: Es kann auch sehr hilfreich sein, die einzelnen parameter à la argv[] in einem array (bzw. einer matrix bei char) zu speichern
-
ist ja schön und gut dass ich kleine buchstaben machen kann (gibts auf ne funktion für _tolower oder so ähnlich (man muss net immer selber basteln))
aber was wäre wenn ich dann nach Hallo suche (alles klein mache) und z.B. haLLo im Text ist???
also ein suchfunktion brauche ich die nicht drauf achtet ob groß oder kleinschreibung
-
Mach ich zwar ungern, dass ich Code hinklatsche, aber ich denke, das ist das einfachste in diesem Fall.
char * aj_stristr(const char * text, const char * suche) { char * tpos, * spos; for(tpos = text, spos = suche; *tpos; ++tpos) { if(tolower(*tpos) == tolower(*spos)) { if(! *(++spos)) { return(tpos-(spos-suche)); } } else { spos = suche; } } return(0); }
Falls jemand den Code nicht versteht, bitte nachfragen!
Und bevor man ihn benutzt, bitte auch versuchen zu verstehen, was er macht!
-
*bautz*
wer lesen kann ist klar im Vorteil. Natürlich geht das beide arrays klein zu machen und dann zu vergleichen.
Danke Danke