Ich verwende diesen Code, um die Standardeingabe zu übernehmen und in eine Zeichenkette einzufügen. dann tokenize die delimeter #Eingabe lesen, bis eine bestimmte Zeichenkette gefunden wird C++
std::string input;
std::getline(std::cin,input, '\0');
std::string delimiter = "#";
StringTokenizer strtok(input,delimiter);
Diese Verwendung macht getline bis Null-Zeichen lesen zu finden ist (glaube ich) und die gesamte Zeichenfolge in input.This funktioniert gut in den Fenstern passieren, wenn ich das cmd laufen und schreiben Sie:
myprogram.exe 0 <testme.txt
ich die Ausgabe ich expecting.The Problem, das ich habe, ist, wenn ich versuche, einen ähnlichen Befehl in linux-Terminal zu laufen (a.out ist mein Programm)
./a.out < testme.txt
Es wird nicht looki stoppen ng für die Tastatureingabe, bis ich ctrl-z drücke. Dies ist auch der Fall, wenn ich in meinen IDE Code :: blocks laufe, wo das Programm geschrieben wird. Sowohl Code :: blocks als auch linux kompilieren mit g ++ ohne Fehler oder Warnungen. Ich denke, mein Problem liegt im Warten auf einen Null-Charakter. Der Grund für die Verwendung des Nullzeichens liegt darin, dass meine Eingabe auf mehreren Zeilen ist und wenn ich nur getline (std :: cin, input) verwendet habe, wurde nur die erste Zeile gelesen.
Beispiel testme.txt
A B C D E F #
A -> Bab #
B -> C#
##
Probe von dem, was ich mit meinem Code mache
std::string data;
std::getline(std::cin,data, '\0');
std::string delimiter = "#";
StringTokenizer strtok(data,delimiter);
// places first token in tk1
std::string t1 = strtok.nextToken();
std::string tk1(t1);
// places next token in tk2
std::string t2 = strtok.nextToken();
std::string tk2(t2);
if(checkstring(tk2,"a") > 0) // this function checks the amount of "a"s in the token. I only care if there is at least 1 "a" so that is what the if statements are for.
{
a = a + 1;
}
// do this if statement for every letter
// example: token = A -> abbbababababa then will print out a = 1 and b = 1
Wenn mein Programm die testme.txt durchsetzen sollte mein Programm Ausgang dieses machen:
A B C D E F
a= 1
b= 1
meine Frage
Jede meiner testme.txt-Dateien endet mit den zwei Zeichen ##. Gibt es eine Möglichkeit, die Eingabe zu stoppen, wenn diese Zeichenfolge (?) Erreicht ist, anstatt auf das Nullzeichen zu warten?
'strtok()' ist die schlechteste Option zu wählen. –
ein zweites Trennzeichen mit anderen Zeichen als das erste hinzufügen? – Treycos
warum nicht den Dateinamen übergeben und nur die Datei lesen ?! – deW1