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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема в сортировке строки по алфавиту 
:(
    Опции темы
Хурин
Дата 17.12.2011, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача:

Напечатать в алфавитном порядке все слова, имеющие в своем составе заданную цепочку из произвольного набора символов. Определить количество слов, которые не имеют в своем составе ни одного символа такой цепочки, и напечатать эти слова.

Не могу отсортировать по алфавиту, компилятор пропускает, но в случае ключа который встречается в словах программа закрывается.

Сортировка
Код

int sort()
 {
       int i;
       int j;
       char *s1,*strTok1;
       char ** r;
       int n=0;
       r=(char**)malloc(sizeof(char*)*k);
       for(i=0;i<n;++i)
       {
           r[i]=(char*)malloc(sizeof(char)*k);
       }
       s1=new char[100];
       strTok1=new char[100];
       strTok1=strtok(string2," ");
       while(strTok1 != NULL)
          {
                    for(i=0;i<k;i++)
                    {
                         memcpy(r[i],strTok1,sizeof(strTok1));
                     }//for i
                    for(i=0;i<k;i++);
                    {
                         while (r[0][j]!=0)
                         {
                               n=n++;
                         }//while r
                    }//for i
          }//while   strTok  

          for(int i=0;i<n-1;i++)
          {
              for(int j=i+1;j<n;j++)
              {
                  if (r[0][i]>r[0][j])
                  {
                        char tmp=r[0][i];
                        r[0][i]=r[0][j];
                        r[0][j]=tmp;
                  }
              }//for j
          printf("\n Slova v kotorih est kluch: ");
          for(int i=0;i<n;i++)
          {
              for(int j=i;j<n;j++)
              {
                      printf("\n Slova v kotorih est kluch: ");
                      printf("",r[i][j]);
              }//for j
          }//for i
          return 0;
 }//sort


И на всякий случай обработка(ключ ввожу с клавиатуры)
Код

int obrabotka(char key[k])
{
    int h;
    time_t t1,t2;
    time(&t1);
    char *string3;
    string3=new char[k];
    int i=0;
    char *s,*strTok,*search;
    char *str;
    int j=0;
    str=new char[100];
    s=new char[100];
    strTok=new char[100];
    search=new char[100];
    strcpy(str, "hjyhoif idtyi i ty oiut yoiot uoi 76586j yoibf t d e4oi5 64 57 u4h8 h7oi85 6oi78 fgcrf");
    for (j=0;j<k;j++)
    {
       string2[j]=0;
       string3[j]=0;
    }//for
    strTok=strtok(str," ");
    while(strTok != NULL)
          {
                 strcpy(s,strTok);
                 search=strstr(s,key);
                 if (search !=NULL)
                 {                      
                      strcat(string2,s);
                      strcat(string2," ");
                 }//if
                 else
                 {
                        i=i+1;
                        strcat(string3,s);
                        strcat(string3," ");
                 }//else
                 
                 strTok=strtok(NULL," ");
          }//while
    sort();//int sort
    printf("\n Slova v kotorih est kluch: %s",string2);
    printf("\n Kolichestvo slov ne imeuchis kluch: %d ",i);
    printf("\n Eti slova: %s",string3);       
    time(&t2);
    vr=(difftime(t2,t1))/1000000.0;
    printf("\n Time=%12.9lf",vr);
    return 0;  
}

PM MAIL   Вверх
volatile
Дата 18.12.2011, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(Хурин @  17.12.2011,  12:26 Найти цитируемый пост)
      int n=0;
       r=(char**)malloc(sizeof(char*)*k);
       for(i=0;i<n;++i)
       {
           r[i]=(char*)malloc(sizeof(char)*k);
       }

Хурин
Вот здесь, n=0, цикл не выполнится ни разу, а значит память не выделяется.
а дальше у вас идет обращение, по указателю на не выделенную память
Цитата(Хурин @  17.12.2011,  12:26 Найти цитируемый пост)
                    for(i=0;i<k;i++)
                    {
                         memcpy(r[i],strTok1,sizeof(strTok1));
                     }//for i


Дальше смотреть не стал.
Честно говоря, код - тихий ужОс! Ч smile 

PM MAIL   Вверх
Хурин
Дата 18.12.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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

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

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


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

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


 




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


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

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