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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите отладить программку!! на языке Си на теиу динамическая память 
:(
    Опции темы
ЛидОК
  Дата 25.5.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задание:
Функция находит в строке заданную подстроку и возвращает динамический массив указателей на все вхождения этой подстроки.



Код

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>

char **change(char *str1, char *str2);
void main()
{

     clrscr();
     char str1[256];
     char str2[256];
     char mas1[99];

    printf("Введите основную строку \n");
    gets(str1);
    printf("Введите подстроку\n");
    gets(str2);

     printf("Вхождение данной подстроки\n");
     char **res = change(str1, str2);
     for(int i = 0 ;i < 10 ; i++)
    {
     if(res[i]!=NULL) printf("%s\n", res[i]);
    }
     getch();
}
char **change(char *str1, char *str2)
{
     char **ss=(char **) malloc (10*sizeof(char*));
     for(int f=0; f<10; f++)
     {
     ss[f]=0;
     }

     int mas=0;
     int poz=0;            // позиция указателя в подстроке
     int flag=0;
     int n=0;             // число совпавших символов
     int dir;
     int j;

 for(int i=0; i<=strlen(str1)-strlen(str2); i++) //отмечаем начало проверяемого
 {                                               //отрезка

   flag=0;
   //--Цикл посимвольной проверки на совпадение первой и 2-ой строки--
   for(j=i, poz=0; j<i+strlen(str2) && flag==0; j++, poz++)
    {
     if(str1[j]==str2[poz])
     {
        n++;       // Увеличиваем число совпавших символов
        if(n==strlen(str2))        // Если равно подстроке-запоминаем положение
         {
         ss[mas] = &str1[i];
         mas++;
         n=0;
         }
         else
        {
         flag=1;
          n=0;
        }
     }

   }
   return ss;
}
}



M
JackYF
Пользуемся кнопкой "Код".


Она почему-то не работает!!!! Помоите исправить ошибки в ней, чтоб работала!!!!! ПОЖАЛУЙСТА!!!!!! smile 

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


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


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

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



Цитата(ЛидОК @  25.5.2008,  15:42 Найти цитируемый пост)
Она почему-то не работает!

Слишком общая характеристика. Что именно не работает?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ЛидОК
Дата 25.5.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пишит, что: Function should return a value

Как исправить?

Добавлено через 12 минут и 51 секунду
Я когда запускаю программ:
Пишит:

Введите основную строку
Я ввожу: askgassdasasasty

Введите подстроку
Я ввожу: as

Программа должа мне вывести на экран номер позиции, где находится моя подстрока в подстроке.

А у меня программа сразу выходит после вывода на экран "Вхождение данной подстроки".

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


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


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

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



Цитата(ЛидОК @  25.5.2008,  16:25 Найти цитируемый пост)
А у меня программа сразу выходит после вывода на экран "Вхождение данной подстроки".


Цитата(ЛидОК @  25.5.2008,  15:42 Найти цитируемый пост)
{
     if(res[i]!=NULL) printf("%s\n", res[i]);
    }

Значит, это условие никогда не срабатывает. Возьми отладчик и проверь, почему.



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


Новичок



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

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



А где взять отладчик? А может проблема в чем-нибудь другом?

PM MAIL   Вверх
mes
Дата 25.5.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(ЛидОК @  25.5.2008,  16:42 Найти цитируемый пост)
   }
   return ss;
}
}

a может все таки
Код

  }   
 }
  return ss;
}



--------------------
PM MAIL WWW   Вверх
ЛидОК
Дата 26.5.2008, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

mes Дата 25.5.2008, 22:16 


Теперь у меня нет ошибок в программе))) СПАСИБО!!!! 
Но она почему-то опять ничего не выводит после сообщения"Вхождение данной подстроки".
Помогите понять почему?! smile 

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  KOD9.CPP 1,35 Kb
PM MAIL   Вверх
mes
Дата 26.5.2008, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(ЛидОК @  25.5.2008,  16:42 Найти цитируемый пост)
 
if(str1[j]==str2[poz]) // при совпадении символа
     {
        n++;       
        if(n==strlen(str2))        // Если равно подстроке-запоминаем
         {
         ss[mas] = &str1[i];  //  при печати этой строки будет выведена строка от текушей позиции до конца первой строки
                                           // при удалени str1 весь массив становится невалидным
         mas++;
         n=0;
         }
         else                                // иначе
        {
         flag=1;                       // говорим что закончить цикл ?? т .е выходим при первом совпадении символов ничего не запомнив ??
          n=0;
        }
     }


Добавлено через 3 минуты и 14 секунд
плюс нехорошо выделять внутри функции и отдаватэ указатель на нее наружу
и функцию лучше определить как change(const char *str1, char char *str2)  и соответствено добавить консты внутри функции


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


любитель
****


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

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



лови.. доделаешь под свои нужды

Код

void OnFoundSubString (const char* begin, const char *end)
{
    printf ("ura ! \n");
};
void FindSubString (const char* str, const char * sub)
{
    const char *pe = str+ strlen(str)-strlen(sub);

    for (const char* p =str; p<=pe; ++p)
    {
        if (*p==*sub)
           {
               const char* p1=p; bool flag =true;
               for (size_t j=0; j<strlen(sub); ++j, ++p1 )
               {
                    if (*p1!=sub[j]) {flag = false; break; }
               }
               if (flag) OnFoundSubString (p, p1); // нашли
            }
    };
}


Это сообщение отредактировал(а) mes - 27.5.2008, 00:46


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

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

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

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

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


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

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


 




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


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

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