Unklarheit (Anfänger)
-
Morgen,

Ich habe ein Programm geschrieben, welches mehrere Wörter/Strings einliest und diese anschließend sortiert wieder ausgibt. Wörter, die doppelt eingelesen wurden, werden nur einmal ausgegeben. Und da kommen wir schon zu meinem Problem:
Mir ist nicht klar, wie das Programm alle zuvor ausgegeben Wörter mit dem nun auszugebenen Wort vergleicht und bei einer vorhandenen Wortwiederholung nicht ausgibt. Eigentlich müsste es, meiner Logik nach, immer nur das letzte ausgegebene Wort mit dem gerade ausgegebenem Wort vergleichen und nicht mit allen schon ausgegebenen Wörtern vergleichen!
Wie dies zu stande kommt, müsste mir erklärt werden, Danke:) - Zeile 22, for-Anweisung#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <conio.h>using namespace std;
int main(){
vector <string> words;
string word;while (cin >> word)
words.push_back(word);
cout << " Anzahl der Woerter:" << words.size() << endl;sort(words.begin(),words.end());
for (int i = 0; i < words.size(); ++i)
if ( words[i] != "Brokkoli" )
if ( i==0 || words[i-1]!=words[i] ) // Warum werden hier alle Werte aus words überprüft?
cout << words[i] <<"\n";
_getch();
return 0;
}Vielen Dank schon einmal, falls sich jemand die Mühe macht mein schlecht geschildertes Problem zu verstehen und mir auch zu erklären.
Wer es schaft kriegt ein:
oder sogar

-
In Version Leserlich 2.0:
#include <iostream> #include <string> #include <vector> #include <algorithm> #include <conio.h> using namespace std; int main() { vector <string> words; string word; while( cin >> word ) { words.push_back( word ); } cout << "Anzahl der Woerter:" << words.size() << endl; sort( words.begin(), words.end() ); for( int i = 0; i < words.size(); ++i ) { if ( words[ i ] != "Brokkoli" ) { if ( i==0 || words[ i - 1 ] != words[ i ] ) cout << words[i] <<"\n"; } } _getch(); }campelino schrieb:
Eigentlich müsste es, meiner Logik nach, immer nur das letzte ausgegebene Wort mit dem gerade ausgegebenem Wort vergleichen und nicht mit allen schon ausgegebenen Wörtern vergleichen!
Der Code prüft vor der Ausgabe eh nur das aktuelle Wort
igegen Worti - 1, und ned alle!?// edit: Tagsoup...
// edihit: Gaaaah!
-
campelino schrieb:
while (cin >> word) words.push_back(word);Wie kommst du aus der Schleife wieder heraus?
-
Indem er
EOFeingibt. Incmd.exeist es^Z.
-
// edit: quatsch.
-
campelino schrieb:
Eigentlich müsste es, meiner Logik nach, immer nur das letzte ausgegebene Wort mit dem gerade ausgegebenem Wort vergleichen
Ja, und da die Wörter sortiert sind, genügt das auch.
-
Belli schrieb:
campelino schrieb:
Eigentlich müsste es, meiner Logik nach, immer nur das letzte ausgegebene Wort mit dem gerade ausgegebenem Wort vergleichen
Ja, und da die Wörter sortiert sind, genügt das auch.
