suchen in strings C++ 

Status
Für weitere Antworten geschlossen.

BorNoe

Registered +
Registriert
Dez. 2007
Beiträge
49
gude,

zu beginn gleich ma en bisschen c++ code:

Code:
string a="hallo test1 hallo test";

int pos;

pos = a.find("test?");
des ganze funktioniert natürlich nicht

ich will also aus einem string die position von test1 raussuchen, allerdings kann anstelle von der 1 auch ne 2 oder 3 oder 4 stehn.
deshalb hab ich mich gefragt ob man die sich verändernde stelle auch mit nem ? auffüllen kann. funktioniert aber leider nicht

gibt es da ne möglichkeit des zu lösen??
 
Dafuer gibts regulaere Ausdruecke.

Code:
using System;
using System.Text.RegularExpressions;

public class Test {

public static void Main() {
string a = "hallo test1 hallo test";
int pos;
Match m = Regex.Match(a,"test[1234]");
pos = m.Index;
Console.WriteLine(pos);
}

}

Habs mal mit C# gemacht, da ich mit C++ noch weniger am Hut habe.
Hoffe mal, dass du das von hier aus nach C++ kriegst.
 
Zuletzt bearbeitet von einem Moderator:
also ich hab leider von C# keine ahung, aber wie ich schon gesehen habe, meinte ich eig das die zahl nach test irgendein beliebiges zeichen der ASCII-Tabelle sein kann, also nicht nur 1, 2, 3, oder 4 sondern auch & oder # oder - + oder sonstige zeichen/ziffern/buchstaben

also ich suche sozusagen en platzhalter den ich da einfügen kann, wie z.b. in der windows suche *.rar oder so, damit er nach allen rar dateien sucht
 
das die zahl nach test irgendein beliebiges zeichen der ASCII-Tabelle sein kann, also nicht nur 1, 2, 3, oder 4 sondern auch & oder # oder - + oder sonstige zeichen/ziffern/buchstaben

Wie ich schon sagte, du brauchst regulaere Ausdruecke. ;)

Ein beliebiges Zeichen genau ein Mal ist der Punkt.

Also:
Code:
Match m = Regex.Match(a,"test.");

Bzw. wohl eher so:
Code:
Match m = Regex.Match(a,"test\S[\s$]");
 
Zuletzt bearbeitet von einem Moderator:
alles klar, aber leider hilft mir des nicht so viel weiter, da ich von C# eig gar kein plan habe und C++ auch gerade nur in der schule lerne und unserer lehrer ziemlich inkompetent scheint und ich mir so mit dem internet o.ä. behilflich sein muss
 
Hab grad n bisschen gegoogelt. Anscheinend gibt es keine Standard Libraries fuer regulaere Ausdruecke in C++.

Bei Boost ist das wohl dabei: Boost C++ Libraries.


Eine Moeglichkeit ohne regulaere Ausdruecke waere z.B.:

Du suchst nach "test" und addierst auf den erhaltenen Index 4 drauf (halt Buchstabenanzahl von "test").
Und dann kuckst du eben ob das Zeichen an dieser Stelle ein Leerzeichen oder String-Ende ist (oder ggf. ein Satzzeichen).
Wenn das nicht der Fall ist, dann steht nach "test" halt deine gewuenschte Wildcard.
Dann addierst du noch eins drauf und kuckst was da ist um dich zu vergewissern, dass es auch genau 1 Wildcard ist und nicht mehr.
 
Zuletzt bearbeitet von einem Moderator:
also erstma danke für deine hilfe, aber leider versteh ich kein wort ^^

bzw. verstehen schon so recht, aber nicht genau wie ichs anwenden soll.

vll meldet sich nochma jemand der mir en code beispiel dafür zeigen könnte wie man es am einfachsten mit c++ hinbekommen kann.

danke trotzdem nochma für deine hilfe
 
Hier:

Code:
#include 
#include 

using namespace std;

int isWild(string& str, int pos) {
return (pos < str.length() && str[pos] != ' ' && str[pos] != '.' && str[pos] != ',');
}

int main( void ) {
string a = "hallo test hallo test1";
string search = "test";

int offset = search.length();
int pos = -1;
int npos = 0;
int found = 0;

while (!npos && !found) {
pos = a.find(search,pos+1);
if (pos == string::npos) npos = 1;
else if (isWild(a,pos+offset) && !isWild(a,pos+offset+1)) found = 1;
}


if (npos) {
cout  }
else {
cout  }

return 0;
}

In search steht halt wonach gesucht werden soll, in dem Fall also "test".

Und die Suche ist genau dann erfolgreich, wenn "test*" gefunden wird.
Wenn man da also z.B. "test12" hat, dann gilt das nicht, weil dort 2 Zeichen dahinter sind, "test1" wuerde gehen.

Musste sagen, wie du es haben willst.
Punkt und Komma gelten ebenfalls nicht, kann man halt anpassen, wie man es haben will.
 
Zuletzt bearbeitet von einem Moderator:
danke für euere antworten, leider übersteigt des meine jetzigen kenntnisse, aber danke trotzdem

damit wäre des erstmal erledigt ^^
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten