Suche nach Wörtern in einem String
-
Hallo und guten Abend liebe Gemeinde.
Wir haben eine neue Aufgabe zu geschickt bekommen:
Schreiben Sie ein Programm, das ausgibt, an welchen Stellen eines Textes ein über die Tastatur eingegebens Wort vorkommt.Da ich vor ein paar Tagen ein ähnliches Programm geschrieben habe, habe ich mich an folgenden Code errinnert:
#include <iostream> #include <cstring> #include <stdio.h> using namespace std; int main() { char String[10000]; char *pString; char Buchstabe; cout << "Geben Sie einen String von weniger als 10000 Buchstaben ein!\n"; gets(String); cout << "Nach welchem Buchstaben soll gesucht werden?\n "; cin >> Buchstabe; pString = strchr(String, Buchstabe); while(pString!=NULL) { cout << "Gefunden an " << pString-String+1 << "\n"; pString = strchr(pString+1, Buchstabe); } return 0; }Nun wollte ich das Programm so umschreiben, dass es statt den Buchstaben nach dem eingegebenen Wort sucht.
Folgenden Code habe ich aufgesetzt:
#include <iostream> #include <string> #include <cstdio> using namespace std; int main() { char String[100000]; char *pString; char Wort[256]; cout << "Geben Sie einen Text von weniger als 100000 Buchstaben ein!\n"; gets(String); cout << "Nach welchem Wort soll gesucht werden?\n"; cin.getline(Wort, 256); pString = strchr(String, Wort); while(pString!=NULL) { cout << "Gefunden an " << pString-String+1 << "\n"; pString = strchr(pString+1, Wort); } return 0; }Im umgeschriebenen Code wird jedoch die Funktion
strchrrot unterringelt mit der MeldungError: Keine Instanz von Überladenen Funktionen "strchr" stimmt mit der Argumentenliste überein.Gibt es denn eine ander Alternative bzw. einen anderen Lösungsweg?? Bzw. wo ist mein Denkfehler??
Vielen Dank für die Antworten im Voraus.
Gruß
Max
-
http://www.cplusplus.com/reference/cstring/strstr/
btw: std::string?
Und es muss cstdio heißen, wie bei cstring.
-
wieso denn auf einmal wieder c-strings? mit std::string geht das so schön einfach...
http://en.cppreference.com/w/cpp/string/basic_string/find
-
strchr sucht einen Buchstaben, wenn du einen String suchen willst nimm strstr. Abgesehen davon sind da natürlich ohne Ende Stilfehler drin, aber die wurden dir schon 1000 mal vorgekaut.
-
Gibt es denn eine ander Alternative bzw. einen anderen Lösungsweg?? Bzw. wo ist mein Denkfehler??
Jetzt mal ehrlich, was ist los mit dir? Statt einfach
strchrzu googlen, zu verstehen was es überhaupt macht und dann - wie schon zig mal erklärt - einfachstd::stringzu nehmen, kommst du hier an und verlangst Hilfe.
-
cooky451 schrieb:
strchr sucht einen Buchstaben, wenn du einen String suchen willst nimm strstr. Abgesehen davon sind da natürlich ohne Ende Stilfehler drin, aber die wurden dir schon 1000 mal vorgekaut.
Danke für den Tipp. Jetzt hat es geklappt.
-
Und mal wieder:
#include <iostream> #include <string> #include <cstdio> using namespace std; int main() { // char String[100000]; Nein! string String; // char *pString; Nein! // char Wort[256]; Nein! string wort; cout << "Geben Sie einen Text von weniger als 100000 Buchstaben ein!\n"; // gets(String); NEIN, NIE; NIMMER! std::getline(std::cin, String); cout << "Nach welchem Wort soll gesucht werden?\n"; // cin.getline(Wort, 256); Besser, aber hier: Nein! std::getline(std::cin, wort); // pString = strchr(String, Wort); Nöööö. size_t pos = String.find(wort); while(pos != string::npos) { cout << "Gefunden an " << pos << "\n"; pos = String.find(wort, pos + 1); } return 0; }
-
Ethon schrieb:
Und mal wieder:
#include <iostream> #include <string> #include <cstdio> using namespace std; int main() { // char String[100000]; Nein! string String; // char *pString; Nein! // char Wort[256]; Nein! string wort; //und so weiter ...Perlen vor die Säue ...