Teilstrings innerhalb eines String suchen
-
erstens:
string s = {...}
gibt es nicht, ausser du hast es mit
typedef char string[1000];
definiert...
string gibt es soviel ich weiß (bin anfänger in c++) in C++, daher
vermute ich du willst in C++ programmieren.was deine wörter vergleichen funktion können sollte, ist mit schleifen den
array durchgehen (oder im falle von c++ den string durchgehen) und
anfangsposition und endposition jedes wortes speichern, mit diesen start/end
werten kannst du dann wort für wort vergleichen.gruß
ITEDVO
-
In C++ gibt es string.find(), womit es sogar noch einfacher ist.
-
Mit schleifen könnte man das lösen, ja.
Ich frage mich aber, wie ich das mit der Paramterübergabe machen kann.
In manchen fällen werden ja nur 2 paramter übergeben, in anderen 12.
Wobei das schema ja immer gleich ist:
Der erste ist der zu prüfende String. Der rest die zu überprüfenden.
-
Übergib doch einfach einen String, der alle Parameter enthält und zerlege diese dann innerhalb der Funktion. Somit braucht deine Funktion immer nur 2 Parameter.
-
In C gibt es die Möglichkeit der Übergabe einer variablen Anzahl Parameter. Diese kannst du verwenden.
-
Wutz meint stdarg.h womit du dies auch lösen kannst. Mach dich einfach mal schlau drüber.
-
Bei stdarg.h musst du aber bekannt geben wie viel Parameter du übergibst.
Entweder NULL-Zeiger am Schluss oder extra Parameter.
printf erfährt das aus dem Formatstring (Anzahl derSchau mal bei das Beispiel bei http://www.cplusplus.com/reference/clibrary/cstdarg/va_start/ ist schon fast was du brauchst.
-
In C++ (mit Angabe der Parameteranzahl):
#include <cstdarg> #include <string> #include <iostream> bool check(const std::string& str, int amount, ...) { bool res = true; va_list vl; va_start(vl, amount); for (int i = 0; i < amount; ++i) { if (str.find(va_arg(vl, char *)) == std::string::npos) { res = false; break; } } va_end(vl); return res; } int main () { std::string s = "Der Schrein ohne Deckel, Schlüssel, Scharnier bringt einen goldenen Schatz, glaubt es mir"; if (check(s, 2, "Schrein", "Scharnier")) { std::cout << "true 1\n"; } if (check(s, 4, "Schrein", "Scharnier", "Schatz", "Deckel")) { std::cout << "true 2\n"; } if (check(s, 2, "Schatz", "Wolke")) { std::cout << "true 3\n"; } return 0; }
-
Und die Variante ohne Parameteranzahl:
bool check(const std::string& str, const char *first, ...) { bool res = true; va_list vl; va_start(vl, first); while (first != NULL) { if (str.find(first) == std::string::npos) { res = false; break; } first = va_arg(vl, const char *); } va_end(vl); return res; } // Aufruf: if (check(s, "Schrein", "Scharnier", "Schatz", "Deckel", NULL)) { }
-
Und wen interessiert dieses C++ Zeugs hier?
-
Wenn dir die va_ Variante zu kompliziert ist, kannst du natürlich auch die zu suchenden Wörter als String übergeben und den dann auch jeweils für die Suche zerlegen, also
check(s, "Schrein,Scharnier,Schatz,Deckel");