Подсчитать количество слов в строке, вывести на экран слова минимальной и максимальной длины - 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, что означает успешный конец работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д