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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Упорядочить слова в алфавитном порядке, Помогите пожулайста найти ошибку 
:(
    Опции темы
sasha45
Дата 29.1.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Вот вызов функции обработки текста:

Код

//********************************
// Обработка текста и вывод результата
   case 3:
     {
       if(res_text!=NULL)
         {
           free(res_text);
           res_text=NULL;
         }
       // Для каждой строки текста
       for(j=0;j<n_str;j++)                // n_str - количество строк текста
         {
           // Вызов функции обработки строки текста
           res_text[j]=obrabotka(text[j]);
           // Вывод результата на экран
           printf("%s \n", res_text[j]);
         }
     }
   break;


А вот сама функция обработки:

Код

//***************************************
// Функция обработки строки текста
char *obrabotka(char *text)
 {
   // Указатель на двумерный массив в котором,
   // 1 строка массива - 1 слово строки текста
   char **slova=NULL;
   // Указатель на символ строки
   char *a;
   // Счтечики
   int i,j,n=0,m=0,k;
   // Для обмена значений элементов.
   char *z;
 
   // Передаем строку текста в функцию
   a=text;
   // Пока не конец строки
   while(a!='\0')
     {
       // Пока встречаются разделители
       while(checkChar(a)==0)
         // Пропускаем их
         i++;
       // Выделение памяти под строки массива
       slova=(char**)realloc(slova,n*sizeof(char*));
       for(j=0;checkChar(a)!=0;j++)
         {
           // Выделение памяти под элементы строки
           slova[n]=(char*)realloc(slova[n],81*sizeof(char));
           // Запись элементов строки в строки массива
           *(slova[n]+j)=*(a+i);
           // Идем к следующему слову
         }
       a++;
     }
 
   // Сортировка строк массива по возрастанию
   for(i=0;i<n-1;i++)
     {
       for(k=i+1;k<n;k++)
         {
           if(strcmp(slova[i],slova[k])>0)
             {
               // Обмен значений элементов
               z=slova[i];
               slova[i]=slova[j];
               slova[j]=z;
             }
         }
     }


функция checkChar (проверка на разделители), так на всякий случай:

Код

//********************************************
// Функция проверки разделителей
int checkChar(char *text)
  {
    int Boolean;

    if(*text==' '
                 || *text=='.'
         || *text==','
         || *text=='?'
         || *text==';'
         || *text=='!'
         || *text=='@'
         || *text=='#'
         || *text=='$'
         || *text=='%'
         || *text=='^'
         || *text=='*'
         || *text=='('
         || *text==')'
         || *text=='\"')
      Boolean=0;
    else
      Boolean=1;
    return Boolean;
  }



Помогите пожалуйста найти ошибку.

Это сообщение отредактировал(а) sasha45 - 29.1.2008, 16:42
PM MAIL   Вверх
JackYF
Дата 29.1.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



В функцию обработки в строку 33 вставь
Код

slova[n][j] = '\0';

И если не работает всё равно, то подробнее укажи - где ошибка, какой вывод программы на каком тексте.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sasha45
Дата 29.1.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



JackYF, поставил, но все равно не работает. При запуске программы через Borland C (под DOS) то программа просто вылетает без ошибок без ничего (просто спокойно завершает свою работу). А когда я запустил эту программу через Borland C++ Builder, то программа вылетела и компилятор начал ругаться на 31 строку. 
PM MAIL   Вверх
JackYF
Дата 29.1.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(sasha45 @  29.1.2008,  18:01 Найти цитируемый пост)
то программа вылетела и компилятор начал ругаться на 31 строку.  

какую именно? их там много...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sasha45
Дата 29.1.2008, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



JackYF, которая 

Код

*(slova[n]+j)=*(a+i);

в функции обработки.
PM MAIL   Вверх
JackYF
Дата 29.1.2008, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Обнули переменные i,j.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
sasha45
Дата 29.1.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все равно не хочет. А может дело в вызове функции?
PM MAIL   Вверх
JackYF
Дата 29.1.2008, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



sasha45, вооружись отладчиком...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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