Подсчитать количество слов в строке, вывести на экран слова минимальной и максимальной длины - 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;
}

Объяснение кода листинга программы

  1. Ввод исходной строки
  2. Выделение памяти под строку
  3. Копирование исходной строки в выделенную память
  4. Разделение строки на слова с помощью функции strtok
  5. Выделение памяти под массив указателей на слова
  6. Заполнение массива словами из строки
  7. Определение длины самого длинного слова
  8. Определение индекса самого длинного слова
  9. Вывод самого длинного слова и его длины
  10. Определение длины самого короткого слова
  11. Определение индекса самого короткого слова
  12. Вывод самого короткого слова и его длины
  13. Замена самого длинного слова на самое короткое
  14. Вывод результирующей строки
  15. Освобождение памяти, выделенной под строку и массив слов
  16. Возврат 0, что означает успешный конец работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы