Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите пожалуйста с функцией 
:(
    Опции темы
sasha45
Дата 16.1.2008, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.1.2008

Репутация: нет
Всего: нет



Помогите пожалуйста. Очень срочно нужна помощь людей, знающих С. Нужно написать программу в которой:
Задан текст, содержащий произвольное количество строк, в котрых отдельные слова могу разделяться одним или несколькими пробелами и знаками пунктуации (перенос слов не используется). Сформировать новый текст, который является результатом следующего преобразования:упорядочить в каждой строке слова в алфавитном порядке.

В общем у меня написано все, но функция обработки не хочет работать. Посмотрите пожалуйста:

Код

char **obrabotka(char **text, int n)  // n - кол-во строк в тексте. **text - введенный текст
  {
    char **res;       // переменная под результат
    char **tmp;       // для работы с исходным текстом
    int j;
    int k,l,z;

    struct words
      {
        char *p;      // указатель на первую букву слова
        int len;      // количество букв в слове
      }
    words[80];        

    memset(&words, '\0', sizeof(words))   // обнуляем p==NULL - элемент
                                          // не использовался

    tmp=text;
    for(j=0;j<n;j++);     // Идем по строкам текста
      {                            // и производим обработку отдельно каждой строки
        while((**tmp!='\0' && (k<80)))   // пока не конец строки
                                                               // и в строке меньше 80 слов
                                        
          {
            if(words[k].p==NULL)        
              *words[k].p=**tmp;
            switch (**tmp)               // проверка на разделители
              {
                case ' ':
                case '.':
                case ',':
                case ';':
                case '\n':
                case '!':
                case '#':
                case '@':
                case '?':
                case '/':
                case '>':
                case '<':
                case ':':
                case '$':
                case '(':
                case ')':
                case '*':
                case '&':
                case '-':
                case '=':
                case '+':
                  words[k].len=*tmp-words[k].p;  // разница между указателями - длина
                                                                                  // слова. tmp указывает на начало след. слова
                                                                                 // или на конец строки
                  k++;          // переходим к след. слову
                  break;
              }
            tmp++;
          }
        words[k].len=*tmp-words[k].p;

        printf(" %u слов найдено в строке \n", k+1);

        // Сортировка
        for(;k>0;k--)       // k - максимальное значение элементов массива
                        
          {
            for(l=0;l<l;l++)
              {
                if(strncmp(words[l].p,words[l+1].p,MIN(words[l].len,words[l+1].len))>0)
                  {
                    *tmp=words[j].p;
                    z=words[l].len;      //перестановка элемента
                    words[l].p=words[l+1].p;
                    words[l].len=words[l+1].len;
                    words[l+1].p=*tmp;
                    words[l+1].len=z;
                  }
              }
          }
        res=(char**)calloc(strlen(*text)+1,1);    // выделение памяти под результат
                                                

        for(k=0,tmp=res;words[k].p!=NULL;k++)
          {
            while((words[k].len--)>0)
              **(tmp++)=*(words[k].p++);
              **(tmp++)=*(words[k].p)?*(words[k].p): ' ';  //копируем оригинальный разделитель  
                                                                                               //слов
                                                          
          }
        **tmp='\0';   // записываем конец строки
        return res;   // возвращаем результат
      }
  }


Помогите пожалуйста. Завтра надо сдать программу.

Это сообщение отредактировал(а) sasha45 - 17.1.2008, 21:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.