Frage von gerlochi, 34

String Arrays abfragen (C++)?

Hi,

ich habe vor, folgendes Programm zu schreiben: Wenn ich "sag Hallo Welt" (soll später Befehle annehmen und ausführen), in einen char[] String(C)-String eingebe (cin), dass ich dann mit if abfragen kann, ob der erste String (nach Leerzeichen getrennt) "sag" ist. Ich habe es mot strtok() versucht, aber irgendwie klappt das nicht. Kennt jemand eine möglichkeit einen C-String zu splitten(Leerzeichen) und ihn danach abzufragen?

Ich dachte mir das ähnlich wie in Java/C#:

int main()

{

char str[] = split(string, " ");

If (str[1] == "sag"&&str[2] == "Hallo")

{

cout << "Hallo " << str[3] << "\n";

}

}

Mein Compiler(Borland C++ 3.0) möchte den String Header einbinden, aber will strings nicht warhaben(Undefined Symbol 'string'). Ich schreibe mein Programm im DOS Format also 16 bit(private Nutzungszwecke) und finde keinen anderen guten (& grafischen) Compiler.

Ich bedanke mich für jede sinnvolle Antwort.

Antwort
von PWolff, 17

Zum eigentlichen Problem - Einbindung des Headers - kann ich leider nichts sagen. (habe auch im Internet nichts gefunden.) Hast du irgendwelche lauffähigen Quellcodes, bei denen Strings verwendet werden? Vielleicht kannst du die ersten Zeilen mit den includes von dort kopieren.

Aber was ich sagen kann - Arrays beginnen in C etc. grundsätzlich mit dem Index 0, d. h. "sag" steht in str[0], nicht in str[1]. Und "sag Hello John Doe" würde so auch nicht funktionieren - ich würde ein loop empfehlen.

Kommentar von gerlochi ,

ok, aber wie mach ich das jetzt genau? könntest du mir einen beispielcode schicken?

Kommentar von PWolff ,
if (str[0] == "sag" && str[1] == "Hallo")
{
cout << str[1]; // leichtere Erweiterbarkeit später, zwar hier überflüssig, aber in der Praxis tauchen solche Erweiterungen immer wieder auf
// z. B. bei if (str[0] == "sag" && (str[1] == "Hallo" || str[1] == "Hi"))
for (i=2; i<str.size; i++) // str.size oder was immer die Länge des Vektors str angibt
{
cout << " " << str[i];
};
cout << "\n";
}
Kommentar von gerlochi ,

danke

Keine passende Antwort gefunden?

Fragen Sie die Community