| Код | #include <stdio.h> #include <stdlib.h> #include <string.h> #define len 100 // максимальная длинна читаемых слов из файла
int read_string( FILE * file, char *** matrix ); // чтение слов из потока void write_string( FILE * file, const char ** matrix, int size ); // вывод слов в поток void sort_string( const char ** matrix, int size ); // сортировка
////////////////////////// MAIN ///////////////////////////// int main(){ FILE * file = fopen( "text.txt", "r" ); // открываем файл с текстом if( !file ) puts("Error open file !"); else{ char ** str; int size = read_string( file, &str ); sort_string((const char**) str, size ); write_string( stdout, (const char**) str, size ); } puts("\n\n\nPress key Enter no continue"); getchar(); // пауза return 0; } ///////////////////// END MAIN /////////////////////////
//// чтение ////////////// int read_string( FILE * file, char *** matrix ){ char buf[len]; // сюда читаем слово из файла int size = 0; // количество слов в массиве int max_size = 10; *matrix = (char**) calloc ( max_size, sizeof(char*));
while( fscanf( file, "%s", buf ) >0 ){ if( size >= max_size ){ // если нехватило памяти max_size += 10; // ещё 10 слов char ** mas = (char**) malloc ( max_size*sizeof(char**)); // увеличенный массив memcpy( mas, *matrix, sizeof(char*)*(max_size-10)); // копируем адреса строк free( *matrix ); // удаляем старые адреса *matrix = mas; // увеличили массив на 10 слов }
char * m = (char*) malloc ( strlen( buf )+1 ); (*matrix)[size] = m; strcpy( (*matrix)[size], buf ); size++; } // end read string
*matrix = (char**) realloc ( *matrix, size*sizeof(char*)); // урезаем массив до количесва слов return size; } //////// вывод ///////// void write_string( FILE * file, const char ** matrix, int size ){ int i; for( i=0; i<size; i++ ) fprintf( file, "%s\n", matrix[i] ); } ////// сортировка ///////// void sort_string( const char ** matrix, int size ){ int i, j; const char * str; for ( i=0; i < size; i++){ str = matrix[i]; size_t a = strlen( str ); for( j=i-1; j>=0 && strlen( matrix[j] ) > a; j-- ) matrix[j+1] = matrix[j]; matrix[j+1] = str; } }
|
|