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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск функций в файле, Вывести список имен всех функций 
:(
    Опции темы
Domen
  Дата 23.5.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

#include <iostream>
#include <malloc.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <string.h> 

int main(void)
{
     int on=true,n=0,i1=0;
     int i;
         char *str=(char*)malloc(128); 
         FILE *file;
         char* file_name = "on.c";
         char load[1000] = "none";
         file = fopen(file_name, "r");
         {
            while (!feof(file))
            {
            fgets( load, 1000, file );
                str=load;
                for (i=0; i<strlen(load);i++)
                {     
                n++;
                while((load[i]>='A'&&load[i]<='Z')||(load[i]>='a'&&load[i]<='z'))
                    {
                        i++;
                    while(load[i+1]=='(')
                    {
                       for (i1=0; i1<n+1;i1++)
                      std::cout<<load[i1];
                          i++;
                          while((load[i]!=')')&&(load[i+1]!=';'))
                          {
                          i++;
                          std::cout<<load[i];
                                      n=0;
                       }
                          on=true;
                    }
                }
         }
             printf("\n");
   }
 }

fclose(file);
getchar();
}

PM MAIL   Вверх
bsa
Дата 24.5.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



имеется в виду поиск всех упоминаний функций (объявления, определения и вызовы) или что-то одно, например определения (реализации)?
PM   Вверх
toxx
Дата 24.5.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



bsa
смешивание средств работы с файлами/выделение памяти Си, выводом в стиле С++\Си вперемешку, это нормально?Просто, как я знаю это очень плохо и не понимаю почему смешивают средства все эти... можно прокомментировать это поподробней?(причины того почему плохо)
PM MAIL   Вверх
Copyleft
Дата 24.5.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хм, а не легче было бы заюзать например sscanf, вместо того чтоб городить огород? хотя возможно задание понял немного криво...
PM MAIL   Вверх
Domen
Дата 24.5.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

bsa
имеется в виду поиск всех упоминаний функций (объявления, определения и вызовы) или что-то одно, например определения (реализации)? 


Все подряд встречающиеся функции, если есть одинаковые, то выдать одну. 
PM MAIL   Вверх
Domen
Дата 24.5.2010, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 
Цитата

Copyleft

хм, а не легче было бы заюзать например sscanf, вместо того чтоб городить огород? хотя возможно задание понял немного криво...


Вот так он работает со строками? 

Код

char stroka []="Sscanf(s,"%d",&i);"
char *str='()';
sscanf (stroka,"%s %*s %*s",str,str);

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


Пердупержденный
***


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

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



Если все-все упоминания функций, то проще не бывает: находите "(", вытаскиваете строку от пробела/таба/переноса строки/начала файла до нее и выкидываете if, for и прочие стандартные конструкции.

//код не смотрел.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
kamre
Дата 25.5.2010, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(djamshud @ 24.5.2010,  20:25)
Если все-все упоминания функций, то проще не бывает: находите "(", вытаскиваете строку от пробела/таба/переноса строки/начала файла до нее и выкидываете if, for и прочие стандартные конструкции.

Очевидно, что это не будет работать, т.к. нужно знать контекст.
Например для такого кода:
Код

typedef int T;

int main()
{
  T(x);    // declaration of variable x
  return 0;
}


При этом для C++ придется обязательно заглядывать вперед для выяснения контекста:

Код

void T(int) {}
int x;

class A {
  int f() {
    T(x);   // declaration of variable x
  }
  typedef int T;
};

PM MAIL   Вверх
djamshud
Дата 25.5.2010, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

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



kamre, очевидно, что задача учебная. Кроме того int() можно рассматривать как конструктор, т.е. функцию.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
kamre
Дата 25.5.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(djamshud @ 25.5.2010,  10:51)
очевидно, что задача учебная.

А почему если учебная, то можно совсем некорректный подход выбирать?

Цитата(djamshud @ 25.5.2010,  10:51)
Кроме того int() можно рассматривать как конструктор, т.е. функцию.

Все равно нужно сначала заресолвить T, чтобы понять что это не вызов функции с именем T.

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


Пердупержденный
***


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

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



>А почему если учебная, то можно совсем некорректный подход выбирать?

Он некорректный, если вы пишите компилятор. В учебных целях - более чем корректный. Не думаю, что ставится задача провести полноценный лексический (а с учетом typedef-ов еще и частичный семантический) анализ. Это мое имхо, тем не менее топикстартер не назвал полностью задание и степень необходимой точности его решения, так что я могу быть не прав.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Domen
Дата 25.5.2010, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я думал, только надо проверить си файл на наличие функций, убрать повторяющиеся, пропустить записи в комментариях и вывести функции, которые есть (стандартные и свои).
PM MAIL   Вверх
bsa
Дата 25.5.2010, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Domen, если тебе нужно парсить файл на языке С, то проблем никаких нет. Делай как тебе сказал djamshud: http://forum.vingrad.ru/index.php?showtopi...t&p=2158252
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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