Осуществить сортировку строк по наиболее длинному слову в порядке неубывания.
Добавлено: 24 фев 2016, 15:01
ЗАДАЧА
Задан текст, состоящий из строк. Строк не менее 10. В строке не менее 5
слов. В слове не менее 5 символов. Слова разделены 1 пробелом.
Осуществить сортировку строк по наиболее длинному слову в порядке
не убывания.
Программа должна выполнять ввод текста, вывод его исходного варианта,
выполнять необходимые действия и выводить полученный текст.
СИ
что не так ссортировкой
Задан текст, состоящий из строк. Строк не менее 10. В строке не менее 5
слов. В слове не менее 5 символов. Слова разделены 1 пробелом.
Осуществить сортировку строк по наиболее длинному слову в порядке
не убывания.
Программа должна выполнять ввод текста, вывод его исходного варианта,
выполнять необходимые действия и выводить полученный текст.
СИ
Код: Выделить всё
#include <stdio.h>
#include <windows.h>
char* Rus(const char* text);
void main(void){
int minString = 10;
int minWord = 5;
int minSymbol = 5;
const int maxString = 20;
const int maxSymbol = 100;
static char buffer[maxString][maxSymbol];
char input[maxString][maxSymbol];
int arrLen[maxString];
int row = 0;
printf(Rus("Введите не мение %d строк. В строке не менее %d слов.\nВ слове не менее %d символов. Слова разделены 1 пробелом\n"), minString, minWord, minSymbol);
printf(Rus("Для прекращения ввода нажмите <Enter> в начале строки.\n\n"));
while (gets_s(buffer[row]) != NULL && row < maxString){
if (strcmp(buffer[row], "") == 0){
if (row < minString){
printf(Rus("Вы должны ввести не менее %d строк(введено %d)\n"), minString, row);
continue;
}
break;
}
strcpy(input[row], buffer[row]);
char *pWord = strtok(buffer[row], " ");
int countWord = 0;
bool error = false;
arrLen[row] = 0;
while (pWord){
if (strlen(pWord) < minSymbol){
printf(Rus("Слово доолжно стоять не мение из %d символов (состоит из %d)\n"), minSymbol, strlen(pWord));
error = true;
break;
}
if (arrLen[row] < strlen(pWord)){
arrLen[row] = strlen(pWord);
}
pWord = strtok(NULL, " ");
countWord++;
}
if (error){
continue;
}
else if (countWord < minWord){
printf(Rus("Вы должны ввести не менее %d слов (введено %d)\n"), minWord, countWord);
}
else{
row++;
}
}
for (int i = 0; i < row; i++){
int tmpLen = arrLen[i];
char *tmpInp = input[i];
for (int j = i; j < row; j++){
if (tmpLen>arrLen[j]){
tmpLen = arrLen[j];
arrLen[j] = arrLen[i];
arrLen[i] = tmpLen;
strcpy(tmpInp, input[j]);
strcpy(input[j], input[i]);
strcpy(input[i], tmpInp);
}
}
}
printf(Rus("Отсортированые строки по наиболее длинному слову в порядке неубывания\n\n"));
for (int i = 0; i < row; i++){
printf("%s\n", input[i]);
}
}
char bufRus[256];
char* Rus(const char* text){
CharToOemA(text, bufRus);
return bufRus;
}