Расположить слова в порядке возрастания их длины Си

Тема в разделе "Общие вопросы по С и С++", создана пользователем bri, 3 июн 2009.

Статус темы:
Закрыта.
  1. bri

    bri Гость

    Я вообще не понимаю Си, люди помогите в решении задачи!
    Дан исходный текст только его нужно переделать так чтобы Слова вводимого предложения выводились в порядке возрастания их длины...вот текст

    [codebox]#include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #define N 20
    12
    // ПРЕДВАРИТЕЛЬНОЕ ОБЪЯВЛЕНИЕ ФУНКЦИЙ
    // Заголовок программы
    void Title();
    // Ввод предложения
    void InpPredl (char predl[]);
    // Выделение из предложения
    void Select(const char *predl, char m[][N],char *sel, int *n);
    // Сборка предложения
    char *Constructor(char slova[][N], char razd[][N], int sl, int rz);
    // Вывод результата
    void OutPredl(char *s1, char *s2);
    // ОСНОВНАЯ ФУНКЦИЯ
    void main()
    {
    // ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ
    char predl[80]; // Введенное предложение
    char *res; // Результирующее предложение
    char slova[N][N]; // Массив слов в предложении
    char razd [N][N]; // Массив разделителей в предложении
    int sl=-1, rz=-1; // Счетчики слов и разделителей
    char *bm="йцукенгшщзхъфывапролджэячсмитьбю";// Буквы строчные
    char *b ="ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";// Буквы за-
    главные
    char *r="`!;:,.?- "; // Разделительные знаки
    // Заголовок программы
    Title ();
    // Ввод предложения
    InpPredl (predl);
    // Выделение из предложения слов
    Select (predl, slova, r, &sl);
    // Выделение из предложения разделителей
    strcat (b, bm);
    Select (predl, razd, b, &rz);
    // Сборка предложения
    res = Constructor(slova, razd, sl, rz);
    // Вывод результата
    OutPredl (predl, res);
    free (res);
    }
    13
    // ОПИСАНИЕ ИСПЛЬЗУЕМЫХ ФУНКЦИЙ
    // Заголовок программы
    void Title()
    {
    clrscr ();
    puts (" Лабораторное задание N 8");
    puts (" Во введенном предложении расположите слова");
    puts (" в порядке возрастания их длины.");
    puts(" Порядок следования знаков препинания не менять.");
    puts(" В предложении используются русские буквы и знаки. \n");
    }
    // Ввод предложения
    void InpPredl(char *s)
    {
    puts(" Введите предложение \n");
    strcpy (s," Верите ли вы, что задача решена?");
    // gets (s);
    }
    // Вывод результата
    void OutPredl (char *s1, char *s2)
    {
    puts ("Исходное предложение");
    puts (s1);
    puts (" Результат ");
    puts (s2);
    getch ();
    }
    // Выделение из предложения
    void Select(const char *predl, char m[][N], char *sel, int *n)
    {
    char *p, *s;
    s=strdup (predl); // Сделать копию исходного предложения
    // так как передается константа, strtok требует
    // внесения изменений при своей работе
    p = strtok (s, sel);
    14
    while (p)
    {
    (*n)++;
    strcpy (m[*n],p);
    p = strtok (NULL, sel);
    }
    free (s);
    }
    // Сборка предложения
    char *Constructor(char slova[][N], char razd[][N], int sl, int rz)
    {
    int i, j;
    char res[80];
    char *s;
    *res=0; // Начальное значение результата
    i = sl;
    j=-1;
    while ((i>=0)||(j<=rz))
    {
    if ((i>=0)) strcat (res, slova); // Добавление слова
    i--;
    j++;
    if ((j<=rz)) strcat (res, razd[j]); // Добавление знаков
    }
    s = strdup (res);
    return s;
    }[/codebox]
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей