2017-11-03 1 views
2

Ich mache ein Kommandozeilenprogramm, und ich frage mich, wie man verschiedene Teile von Sätzen bekommt, also sagen wir, wenn jemand cd Windows/Cursors eingegeben hat, würde es erkennen (mit einer if-Anweisung)) dass sie cd eingegeben haben und dann (in derselben if-Anweisung) würde sie den Rest des Satzes auswählen und diesen als Verzeichnis setzen. Das ist mein Code:Wie man Teile von Sätzen in Strings (C++) auswählt

#include "stdafx.h" 
#include <string> 
#include <iostream> 

using namespace std; 
int main() 
{ 
    while (1) 
    { 
     string directory = "C:/"; 
     string promptInput; 
     string afterPrint; 
     string prompt = "| " + directory + " |> "; 
     cout << prompt; 
     cin >> promptInput; 

     if (promptInput == "") 
     { 

     } 
     else if (promptInput == "h:/") 
     { 
      directory = "H:/"; 
     } 
     if (promptInput != "") { 
      cout << " " << afterPrint << "\n"; 
     } 
    } 
    return 0; 
} 

Ich habe noch nichts versucht, also bin ich offen für Vorschläge.

Hilfe wird sehr geschätzt.

-Caleb Sim

+0

Unrelated: Wenn Sie Visual Studio verwenden und '# include "stdafx.h"' legt dies nahe, legt '# include "stdafx.h"' an dem ersten, was in der Datei. Alles darüber wird ignoriert. Mehr hier: https://stackoverflow.com/questions/2976035/purpose-of-stdafx-h. Warum Menschen diesen Schlumpf ertragen: https://stackoverflow.com/questions/4726155/whats-the-use-for-stdafx-h-in-visual-studio – user4581301

Antwort

1

Sie können std::stringstream verwenden, um jede Zeile zu lesen und Konvertiere es in Stream. Dann brechen Sie die Linie in separate Teile, erstellen Sie eine Antwort basierend auf dem ersten Wort in der Zeile. Zum Beispiel:

#include <sstream> 
... 
int main() 
{ 
    string line; 
    while(getline(cin, line)) 
    { 
     stringstream ss(line); 
     string cmd; 
     if(ss >> cmd) 
     { 
      if(cmd == "cd") 
      { 
       string dir; 
       if(ss >> dir) 
       { 
        cout << "changedir: " << dir << "\n"; 
       } 
      } 
      else if(cmd == "c:" || cmd == "c:\\") 
      { 
       cout << "changedir: " << cmd << "\n"; 
      } 
      else 
      { 
       cout << "error\n"; 
      } 
     } 
    } 
    return 0; 
} 
0

Die allgemeine Antwort auf Ihr Problem Satz abhängt, sondern eine konkrete Antwort für Ihr Beispiel wie folgt aussehen könnte:

else if (promptInput == "cd") 
{ 
    std::string directory; 
    std::getline(std::cin, directory); 
    ChangeDirectory(directory); 
} 
Verwandte Themen