Hilfe mit substr()

partitionist hat gesagt.:
Gut der Code funktioniert THX. Bei mir werden 14 Warnungen ausgegeben wie z.b:

warning C4786: [...]
Ist das schlimm?
Nein, die Warnung C4786 ist nur eine Warnung - die man ruhig erstmal ignorieren kann. Es ist nur eine Begrenzung des Compilers wenn er Debugging Symbole generiert. Diese sind nämlich auf 255 Zeichen begrenzt und wenn ein Symbol doch mal länger ist (was häufig bei Template Code und mit der STL passiert) dann generiert er eine solche Warnung.

Man kann die Warnungen so ausschalten:
Code:
#pragma warning (disable: 4786)

partitionist hat gesagt.:
Code:
if(str.length() == NULL)
NULL ist ein Macro welches den Wert eines Nullpointers repräsentiert. Wenn du etwas anderes als einen Pointer wie z.B. einen int vergleichst solltest du lieber Literale verwenden anstatt von NULL. Es sieht einfach irgendwie komisch aus. Außerdem kannst du alternativ die Funktion string::empty () benutzen.

Code:
string str;	//Eingabe String
  
string cmd; 
list<string> params;
 
do 
{
  Input_Pfeil("");
  fontGreen();
 
  if (getline (cin, str)) {
    if (str.empty ())
      // Eingabezeile war leer.
      continue;
    
    istringstream cmdline (str);
    if (cmdline >> cmd) {
      string tmp;
      while (cmdline >> tmp) {
        params.push_back (tmp);
      }
    }

    if (cmd == "blah") {
      // ...
    else if (cmd == "foo") {
      // ...
      // ...
    else {
      cout << "Der Befehl: " << str << " ist unbekannt" << endl;
    }
  }
} while(cin);
 
Wieso funktioniert das mit dem ausschalten der Warnungen nicht, bei anderen gehts warnungen gehts
Also die eingabe hab ich ein bißchen anders gemacht, naja wie kann ich nun mit den parameter weiterarbeiten, einzelnd zugreifen z.b:

if (cmd == "test")
{
// das Kommando test muß 2 Parameter haben
if (params.size () == 2)
{
cout << "2 parameter" << Parameter_1 << " " << Parameter_2 << endl;
...
 
partitionist hat gesagt.:
Wieso funktioniert das mit dem ausschalten der Warnungen nicht, bei anderen warnungen gehts
Also du mußt das #pragma vor die ganzen #include Anweisungen schreiben.

partitionist hat gesagt.:
Also die eingabe hab ich ein bißchen anders gemacht
Das ist schlecht. ;) Jedenfalls so wie du es vorher hattest prüfst du nicht ob irgendwas eingelesen werden konnte (bzw. ob ein Fehler auftrat) und du hast es irgendwie so umständlich gemacht...

partitionist hat gesagt.:
wie kann ich nun mit den parameter weiterarbeiten, einzelnd zugreifen
Genau so wie FireFlow das schonmal vorgemacht hat.

Vielleicht solltest du statt einer Liste lieber einen Vektor (std::vector) nehmen, dann kannst du auf die Elemente indiziert zugreifen.

Code:
vector<string> params; // statt list<string> params;

... // alles andere bleibt so.

for (int i = 0; i < params.size (); ++i) {
  cout << i+1 << ". parameter: " <<  params[i] << endl;
}

Gruß
 
Zuletzt bearbeitet:
Zurück