String im string suchen
-
Ja stimmt. Ich weiß ehrlich gesagt auch nicht was der Unterschied zwischen c-Strings und strings ist.
Ich wüsste halt gerne welchen befehl ich brauch ob compare oder was auch immer... da gibts ja doch ne ganze latte.
-
#include <string> #include <fstream> #include <iostream> #include <vector> // #include <string> wtf alter!? // using namespace std; ich würde es lieber lassen... int main() { std::vector<string>stringvec; std::ifstream file; std::string filename; std::cout << "Quelldatei? "; std::cin >> filename; file.open(filename.c_str(), ios::binary | ios::in); if (!file) { std::cerr << filename << "Datei wurde nicht gefunden!\n"; } std::string line; std::string WordToFind("H"); std::string::size_type result; while(!file.eof()) { getline(file, line); stringvec.push_back(line); std::cout<< line <<std::endl; result = line.find(WordToFind, 0); } return 0; }Die Kommentare waren Quatsch. Und was du mit:
char *strstr(const char *stringvec[z], const char *exprs); // Fehler bei Suche von String im stringvor hattest weiß ich auch nicht...
!Vorsicht - Code ungetestet! :xmas1: :xmas2:
-
Kurz:
C-Strings sind Arrays vom Typ char[] bzw. Zeiger vom Type char* die auf den Anfang eines Speicherbereichs zeigen, an dem mehrere solche Variablen vom Typ char liegen. Das Zeichen '\0' markiert dabei das Ende der Zeichenkette.
string ist eine Klasse aus der C++-Standardbibliothekt, die so einen C-String kapselt und eine deutlich einfachere Verwendung ermöglicht. Die solltest du als Anfänger erstmal verwenden. Später kannst du dich dann auch mal mit den C-Strings auseinandersetzen, deren Verwendung nicht ganz so einfach ist.Lang:
http://www.cpp-tutor.de/cpp/le06/felder.html#cstring
http://www.cpp-tutor.de/cpp/le06/string.html
-
Oh ok, wenn das c für charakter steht war ich ein wenig falsch gewickelt...
Vielen Dank für die Antworten!!
-
Jetzt muss ich nochmal nachfragen, was bedeutet denn das "H" in der Zeile:
std::string WordToFind("H");und was passiert bei dem
result=line.find(Wordtofind,0)
weil bei mir passiert leider nix, auch nicht wenn ich danach
cout<<result;
mach. Und ich habe einige Wordtofind im Text....
-
MichiBbbb schrieb:
Oh ok, wenn das c für charakter steht war ich ein wenig falsch gewickelt...
Vielen Dank für die Antworten!!Das C im Name der C-Strings steht schon für die Sprache C. Diese Art der Repräsentation von Zeichenketten ist nämlich ganz typisch für C, keine (bzw. kaum eine) andere Sprache macht das so anfängerunfreundlich.
-
MichiBbbb schrieb:
Jetzt muss ich nochmal nachfragen, was bedeutet denn das "H" in der Zeile:
std::string WordToFind("H");und was passiert bei dem
result=line.find(Wordtofind,0)
weil bei mir passiert leider nix, auch nicht wenn ich danach
cout<<result;
mach. Und ich habe einige Wordtofind im Text....
Dann zeig mal etwas mehr Code.
Das H ist nur ein Beispiel für ein Suchwort. Da kann auch I stehen. Oder Hallo.
Das find sollte dir die Position des ersten H in line zurückgeben.
-
MichiBbbb schrieb:
Jetzt muss ich nochmal nachfragen, was bedeutet denn das "H" in der Zeile:
std::string WordToFind("H");So langsam hab ich das Gefühl bei dir fehlen ziemliche viele Grundlagen. Hier legst du ein Objekt der Klasse string mit dem Namen WordToFind an und initialisierst es mit der Zeichenkette "H" (die Klasse string verwaltet Zeichenketten, wobei du das eigentlich wissen solltest)
und was passiert bei dem
result=line.find(Wordtofind,0)
Hier wird der string mit dem Namen line nach der Zeichenkette durchsucht, die in der Variable WordToFind gespeichert ist. D.h. die Zeichenkette "H" wird gesucht und die Position an der das erste H vorkommt in der Variablen mit dem Namen result gespeichert.
weil bei mir passiert leider nix, auch nicht wenn ich danach
cout<<result;
mach. Und ich habe einige Wordtofind im Text....
Es wird ja auch nicht nach "WordToFind" gesucht sondern nach "H". Ist dir das klar?
-
Mir ist leider die ganze Sache nicht komplett klar.
Ich bin Maschinenbaustudent und hatte 1 semester c-grundlagen (im wahrsten Sinne des Wortes...) und schreib jetzt blöderweise eine diplomarbeit bei der ich c++ programmieren soll. Deswegen muss ich mich da jetzt durchhangeln....
Aber so weit so gut, denn wenn ich die benötigten Signalwörter aus den Zeilen finde, dann bin ich schon sehr weit mit meinem Programm.Ich versuchs nochmal, jetzt hab ichs vielleicht verstanden.
-
Um mal Klarheit zu schaffen was ich eigentlich haben will: Ich möchte aus meinem ASCII-Text (siehe unten) die Werte nach exprs in Variablen speichern.
Zum einen die 1 und zum anderen das 1+s. (Der Ausschnitt unten stammt aus einem Scilab-Blockdiagramm, das als ASCII abgespeichert wurde)Mein Plan war alles mit getline in einen Stringvektor zu speichern und dann die einzelnen strings noch nach den Signalwörtern zu untersuchen und die benörtigten Parameter herauszufiltern (da bin ich gerade dabei...). Der Grund das ganze in einen vektor zu schreiben ist, dass ich dann weitere parameter in anderen zeilen direkt über den vektorelementzugriff realisieren kann.
Nur aus irgendeinem Grund macht er keine anstalten exprs zu finden. Kann es sein dass er exprs nicht erkennt weil direkt danach ein = kommt?
ASCII-Text:
scs_m_1.objs(1)=scicos_block(..
gui="CLR",..
graphics=scicos_graphics(..
orig=[214.904,209.67733],..
sz=[50,50],..
flip=%t,..
theta=0,..
exprs=["1";"1+s"],..
pin=0,..
pout=0,..
pein=[],..
peout=[],..
gr_i=list(..
["xstringb(orig(1),orig(2),[''num(s)'';''den(s)''],sz(1
),sz(2),''fill'')";
"xpoly([orig(1)+.1*sz(1),orig(1)+.9*sz(1)],[1,1]*(orig(
2)+sz(2)/2))"],8),..
id="",..
in_implicit="E",..
out_implicit="E"),..
model=scicos_model(..
sim=list("csslti4",4),..
in=1,..
in2=[],..