Splitting string in einen vector<string> Wörter

Vom Accelerated C++(Buch), fand ich diesen code, das identisch ist mit dem Programm, aber verarbeitet im Programm selbst ist anders, und das verwirrt mich an einigen Teil.

Den code unten gut, natürlich wird es die Ausgabe jedes Wort einzeln(durch Schleifen), basierend auf Benutzereingaben, nachdem der Benutzer das Ende der Datei, dann das Programm beenden.

int main()
{
    string s;
    while (cin >> s)
        cout << s << endl;
    return  0;
}

Im Gegensatz zu den obigen code, dieser speichert jedes Wort in einem vector, dann verwenden Sie einen index i und j zu erkennen, die nicht-whitespace-Zeichen, und die eigentliche Frage ist, ich verstehe nicht, wie es passiert mit dem vector.

Was ist ein Leerraum in vector? Ein element?

Zuerst dachte ich, geht das Programm durch die einzelnen Charakter, weil ich dachte, die whitespace-Zeichen sind Zeichen(die i und j Funktionalität ist), dann das Buch und sagte, es gehen Sie durch die einzelnen Wort, ich weiß nicht, wie um dies zu testen mich, wie ich sehen kann, wie der innere Prozess, in den der compiler selbst bestimmt werden.

vector<string> split(const string& s)
{
    vector<string> ret;
    typedef string::size_type string_size;
    string_size i = 0;

    //invariant: we have processed characters [original value of i, i) 
    while (i != s.size())
    {
        //ignore leading blanks
        //invariant: characters in range [original i, current i) are all spaces
     while (i != s.size() && isspace(s[i]))
         ++i;

     //find end of next word
     string_size j = i;
     //invariant: none of the characters in range [original j, current j)is a space
     while (j != s.size() && !isspace(s[j]))
         j++;
         //if we found some nonwhitespace characters 
         if (i != j) {
             //copy from s starting at i and taking j - i chars
             ret.push_back(s.substr(i, j - i));
             i = j;
         }
    }
    return ret;
}

int main() {
    string s;
    //read and split each line of input 
    while (getline(cin, s)) {
        vector<string> v = split(s);

        //write each word in v
        for (vector<string>::size_type i = 0; i != v.size(); ++i)
             cout << v[i] << endl;
    }
    return 0;
}
  • Du bist fehlen einige Klammern ({, }) in Ihrem code.
  • gut, dass ich es einfach kopieren aus dem Buch
InformationsquelleAutor Vastor | 2011-12-08
Schreibe einen Kommentar