Program sortujący łańcuchy tekstowe
Ostatnio zmodyfikowano 2014-01-06 14:33
lucky44 Temat założony przez niniejszego użytkownika |
Program sortujący łańcuchy tekstowe » 2014-01-06 11:32:24 Witam, mam do napisania program który wczyta łańcuchy od użytkownika i posortuje je alfabetycznie. Jednak jest kilka uwag do zadania, mianowicie wprowadzanie łańcuchów ma się zakończyć na wprowadzeniu łańcucha pustego i nie mam pojęcia jaki warunek zawrzeć. Próbowałem na kilka sposobów... ale nijak nie wiem, bo jak już piszę jakiś warunek to wczytywanie wykonuje się nieskończoną ilość razy albo w ogóle się wysypuje. Z góry dzięki za pomoc. #include <iostream> #include <string.h> #include <stdlib.h>
using namespace std;
char * dopobrania( void ) { char bufor[ 40 ], * b; cin >> bufor; int e = strlen( bufor ); b = new char[ e + 1 ]; strcpy( b, bufor ); return b; }
void sortowanie( char * W[], int a ) { int i, j; char * t; if( a == 0 ) return; for( i = 0; i < a - 1; i++ ) for( j = i + 1; j < a; j++ ) if( _strcmpi( W[ i ], W[ j ] ) > 0 ) { t = W[ i ]; W[ i ] = W[ j ]; W[ j ] = t; } }
void wyswietl( char * W[], int n ) { for( int i = 0; i < n; i++ ) cout << W[ i ] << endl; }
int main( void ) { char * lancuch[ 40 ]; int ilosc = 0; cout << "Pisz kolejne lancuchy do sortowania – " << "zakoncz znakiem *:" << endl; do { lancuch[ ilosc++ ] = dopobrania(); } while( * lancuch != '...' ); ilosc--; cout << "Wpisales lancuchy:" << endl; wyswietl( lancuch, ilosc ); sortowanie( lancuch, ilosc ); cout << "Alfabetycznie:" << endl; wyswietl( lancuch, ilosc ); fflush( stdin ); getchar(); return 0; }
|
|
alixir |
» 2014-01-06 12:15:54 Doprecyzuj czy te łańcuchy to mają być całe linie, które są następnie sortowane alfabetycznie (ja to przynajmniej tak zrozumiałem). Bo sam warunek jest chyba dość prosty i wygląda najogólniej tak: std::string tekst; do { std::getline( std::cin, tekst ); } while( tekst != "\0" ); |
|
lucky44 Temat założony przez niniejszego użytkownika |
» 2014-01-06 12:37:00 Tzn. mam takie zadanie że ma program wczytywać łańcuchy aż wystąpi łańcuch "pusty". Czyli wyraz ... pozniej enter kolejny wyraz no i naciskam enter i jeszcze raz enter (linia do pobierania wyrazu jest pusta) no i wtedy ma kończyć przyjmować wyrazy i program ma wykonywać sort alfabetyczny. |
|
alixir |
» 2014-01-06 14:29:53 W ramach ćwiczeń napisałem sobie coś co chyba spełnia twoje oczekiwania. Oczywiście wszelkie sugestie mile widziane. #include <iostream> #include <string> #include <algorithm>
class cWords { public: void printWords(); int getSize(); void getWords(); void sortWords(); private: std::string * tWords; int size; std::string to_lower( std::string ); };
int main() { cWords slowa; slowa.getWords(); std::cout << "Ilosc wprowadzonych lancuchow: " << slowa.getSize() << std::endl; slowa.sortWords(); std::cout << "Posortowane alfabetycznie:" << std::endl; slowa.printWords(); return 0; }
void cWords::printWords() { for( int i = 0; i < size; i++ ) std::cout << tWords[ i ] << std::endl; }
void cWords::getWords() { std::string * tNew; std::string * tOld; std::string tmp; tNew = new std::string[ 1 ]; int licz = 0; while( true ) { if( licz != 0 ) { tOld = new std::string[ licz ]; for( int j = 0; j < licz; j++ ) tOld[ j ] = tNew[ j ]; delete[] tNew; tNew = new std::string[ licz + 1 ]; for( int j = 0; j < licz; j++ ) tNew[ j ] = tOld[ j ]; delete[] tOld; } std::getline( std::cin, tmp ); if( tmp == "\0" ) { break; } tNew[ licz ] = tmp; licz++; }; tWords = tNew; size = licz; }
int cWords::getSize() { return size; }
void cWords::sortWords() { int i, j; std::string t; if( size == 0 ) return; for( i = 0; i < size - 1; i++ ) for( j = i + 1; j < size; j++ ) if( to_lower( tWords[ i ] ) > to_lower( tWords[ j ] ) ) { t = tWords[ i ]; tWords[ i ] = tWords[ j ]; tWords[ j ] = t; } }
std::string cWords::to_lower( std::string napis ) { transform( napis.begin(), napis.end(), napis.begin(),::tolower ); return napis; }
|
|
pekfos |
» 2014-01-06 14:33:17 Oczywiście wszelkie sugestie mile widziane. | std::vector<> znacznie uprościłby sprawę. No i wypadałoby używać technik znanych autorowi tematu.. |
|
« 1 » |