Подсчитать количество слов в строке, вывести на экран слова минимальной и максимальной длины - C (СИ)
Формулировка задачи:
Ввести строку. Подсчитать количество слов в строке, вывести на экран слова минимальной и максимальной длины. Создайте массив указателей на все функции и меню для работы с пользователем.
Пока подсчет слов с троке
char * str = (char *)malloc(50 * sizeof(char));
strcpy(str, "Life long enought to find the right one");
char * token = strtok(str, " ");
int count = 0;
char ** mas = (char **)malloc(25 * sizeof(char*));
while (token != NULL)
{
mas[count] = (char *)malloc((strlen(token) + 1) * sizeof(char));
strcpy(mas[count], token);
count++;
token = strtok(NULL, " ");
}
printf("В строке %d слов", count);
return 0;
}Решение задачи: «Подсчитать количество слов в строке, вывести на экран слова минимальной и максимальной длины»
textual
Листинг программы
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "rus");
printf("Исходная строка\n\n");
char * str = (char *)malloc(50 * sizeof(char));
strcpy(str, "Life long enought to find the right one");
puts(str);
char * token = strtok(str, " ");
int count = 0;
char ** mas = (char **)malloc(25 * sizeof(char*));
while (token != NULL)
{
mas[count] = (char *)malloc((strlen(token) + 1) * sizeof(char));
strcpy(mas[count], token);
count++;
token = strtok(NULL, " ");
}
printf("В строке %d слов\n", count);
int max = strlen(mas[0]), index_max_len = 0;
for (int i = 1; i<count; i++)//поиск максимума
if (strlen(mas[i]) > max)//количество символов в строке до первого вхождения символа конца строки
{
max = strlen(mas[i]);
index_max_len = i;
}
printf("Максимальное слово = %s (длина = %d символов)\n", mas[index_max_len], max);
int min = strlen(mas[0]), index_min_len = 0;
for (int i = 1; i<count; i++)//поиск минимума
if (strlen(mas[i]) <= min)
{
min = strlen(mas[i]);
index_min_len = i;
}
printf("Минимальное слово = %s (длина = %d символов)\n", mas[index_min_len], min);
printf("\n");
char * tmp = (char *)malloc((max + 1) * sizeof(char));// замена максимального слова на минимальное
strcpy(tmp, mas[index_max_len]);
strcpy(mas[index_max_len], mas[index_min_len]);
strcpy(mas[index_min_len], tmp);
strcpy(str, "");
printf("Результирующая строка\n\n");
for (int i = 0; i<count; i++)
{
strcat(str, mas[i]);
strcat(str, " ");
}
puts(str);
printf("\n");
return 0;
}
Объяснение кода листинга программы
- Ввод исходной строки
- Выделение памяти под строку
- Копирование исходной строки в выделенную память
- Разделение строки на слова с помощью функции strtok
- Выделение памяти под массив указателей на слова
- Заполнение массива словами из строки
- Определение длины самого длинного слова
- Определение индекса самого длинного слова
- Вывод самого длинного слова и его длины
- Определение длины самого короткого слова
- Определение индекса самого короткого слова
- Вывод самого короткого слова и его длины
- Замена самого длинного слова на самое короткое
- Вывод результирующей строки
- Освобождение памяти, выделенной под строку и массив слов
- Возврат 0, что означает успешный конец работы программы