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