zeichenketten mit eof
-
Hi ich hab ein problem mit einem c++programm was ich in der fh schreiben sollte. hab schon alles mögliche versucht anders zu machen aber komm einfach nich darauf was falsch sein soll. Wäre schön wenn mir jemand helfen könnte
!!Aufgabenstellung lautet:
"Erstellen Sie ein C++-Programm,dass bis zum EOF mehrere Zeichenketten von der Tastatur einliest, diese sortiert und wieder auf dem bildschirm ausgibt."Mein Ansatz ist:
[/cpp]#include <iostream>
#include <string>
#include <cstring>
using namespace std;int main () {
int i=0,j=0,k=0;
string str[10], strhelp[10];
cout << "\n\tSortierverfahren\n\n";
cout << "Zeichenkette eingeben:";
cin >> str[i];
while( !(cin>>str[i]).eof() )
{
cout << "Nächste Zeichenkette eingeben:";
cin >> str[i];
i++;
}
for(j=0;j<=i+1;j++)
{
if(str[j] > str[j+1])
{
strcpy ( strhelp[j] , str[j] ) ;
strcpy ( str[j] , str[j+1] ) ;
strcpy ( str[j+1] , strhelp[j] ) ;
j=0;
}
}
for(k=0;k<=i+1;k++) {
cout << "\t" << str[k] ;
}
return 0;
}
-
Der Schlüssel zu einem guten Programm ist eine gute Struktur. Zerlege dein Program in separate Funktionen. Diese lassen sich dann auch individuell testen und verstehen.
Deine Funktion erledigt zu viel auf einmal (einlesen, auf Fehler prüfen, Liste der Eingaben verwalten, sortieren und Ergebnis ausgeben), da würde ich auch den Überblick verlieren.
-
Du suchst so etwas wie:
std::vector< std::string > kette; kette.reserve( 100 ); for ( std::string in; std::cin >> in && !std::cin.eof(); ) { kette.push_back( in ); } std::sort( kette.begin(), kette.end() ); // <----- fertig. for ( std::vector< std::string >::iterator idx = kette.begin(); idx != kette.end(); ++idx ) { std::cout << *idx << std::endl; }Das hier ist aber recht hässliche und nicht optimierte Lösung.

-
#include <iostream> #include <iterator> #include <set> #include <string> int main() { std::set<std::string> sorter; std::copy(std::istream_iterator<std::string>(std::cin), std::istream_iterator<std::string>(), std::inserter(sorter, sorter.begin())); std::copy(sorter.begin(), sorter.end (), std::ostream_iterator<std::string>(std::cout, "\n")); }
-
Wäre nicht std::multiset besser?
-
Ah. Ja, da hast du recht.