2016-04-04 14 views
0

Ich habe ein Programm erstellt, das englische Wörter in Schwein Latein (Teil meiner Klasse) konvertiert. Derzeit konvertiert es nur ein Wort: "Hallo" -> "Elloyay".Wie fügen Sie Strings zu einem Array von Strings

Aus meiner eigenen Neugierde wollte ich die Möglichkeit ermöglichen, mehrere durch Leerzeichen getrennte Wörter zu lesen und dann jedes dieser Wörter entsprechend umzurechnen.

Technisch gesehen verwenden Sie substr, um ein Wort zwischen zwei aufeinanderfolgenden Leerzeichen zu erfassen. Die Eingabe wird durch substr zu getrennten Wörtern unterbrochen. Jedes Wort in einer Zeit wird von meinem make_pig_latin Parser geparst und ersetzt ihr entsprechendes Wort in diesem string array.

z.B .: die Eingang"Hallo gelbe Kerl" im Ausgang führen"elloyay ellowyay ellowyay".

Kann jemand mich wissen lassen, wenn meine Codierung, um diese Aufgabe zu erfüllen, auf dem richtigen Weg ist. Ich stürze ständig in Runtime und ich denke, es ist wegen der Array von Strings nicht korrekt erstellt. Aber ich bin mir nicht ganz sicher.

Jede Hilfe wäre willkommen.

int main() 
{ 
    string word; 

    string word_List[] = { word }; 

    cout << "Enter your story (Please include spaces between each word): "; 
    getline(cin, word); 

    char c = word[0]; 

    int i = 0; 
    int j = 0; 
    int k = i; 
    int l = 0; 
    while (i < (word.length() - 1)) 
    { 
     if (word[i] = '\n') 
     { 
      string new_Word = word.substr(j, k); 
      string test_Pig = make_Pig_Latin(new_Word); 

      word_List[l] = test_Pig; 
      l == l + 1; 
      j == i + 1; 
      i == k + 1; 
     } 
     if (word[i] = '.') 
     { 
      i = word.length() + 1; 
     } 
    } 
    cout << "The Story In Pig Latin Is " << word_List << endl; 

    cin.ignore(); 
    cin.get(); 
    return EXIT_SUCCESS; 
} 

Zusätzliche Informationen für den Benutzer hinzuzufügen: alle Fehlerzeilen, Compiler + Version verwendet, O verwendet.

+2

Verwenden Sie einen 'std :: vector'. 'word_List' kann nur eine einzige' Zeichenfolge' enthalten, rohe Arrays haben eine feste Kompilierzeit. – user657267

+0

Diese Art der Sache 'if (word [i] = '.')' Sollte 'if (word [i] == '.')' Sein. Und Ihr Array hat nur einen Steckplatz. –

Antwort

2

if (word[i] = '\n') wird word[i] zu '\n' gesetzt. Sie wahrscheinlich zu testen if(word[i] == '\n')...

Allerdings erhalten Sie Eingabe eine Zeile zu der Zeit, gibt es keine neue Zeile dazwischen.

Sie könnten stattdessen den Text durch Tests brechen für Leerzeichen if(word[i] == ' ')...

geschieht es einen einfacheren Weg zu sein. Verwenden Sie std::stringstream, um Wörter zu extrahieren. Verwenden Sie std::vector, um Array von Zeichenfolge (oder eher Vektor) zu erstellen. Beispiel:

#include <iostream> 
#include <string> 
#include <vector> 
#include <sstream> 

int main() 
{ 
    std::string sentence = "How do you add strings to an array of strings"; 
    std::vector<std::string> vs; 
    std::stringstream iss(sentence); 

    std::string word; 
    while (std::getline(iss, word, ' ')) 
     vs.push_back(word); 

    for (auto wrd : vs) 
     cout << wrd << "\n"; 

    return 0; 
} 
+0

danke für dieses Beispiel. Ich werde es ausprobieren, möchte zuerst Vektoren lesen, um zu verstehen, was sie tun, ziemlich neu in dieser Programmierwelt. Ich werde aktualisieren, wenn ich es zur Arbeit bringen kann. Danke für dein Wissen. – Jason

Verwandte Themen