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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неполучается определять символы. 
V
    Опции темы
K0SHKA
  Дата 11.3.2008, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый вечер !

Открываем файл с html кодом, считываем содержимое в массив str, потом пытаюсь вытащить тег допустим <html> проверяю есле символ равен '<' то записываем тег в массив BUF пока не встретится символ '>' вот чтото неполучается =( помогите разобратся.

Код

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

void main()
{
    FILE *file;
    char *name = "C:\\DATA.html";
    char str[100];
    char BUF[100];
    int i;

    file = fopen(name,"r");
    if(file != 0)
    {
        while(!feof(file))
        {
            fgets(str,30,file);
            printf("%s",str);
        }
    }

    for(i = 0;i < 100;i++)
    {
        if(str[i] == '<')
        {
            while(str[i + 1] != '>')
             BUF[i] += str[i+1];
        }
    }
    printf("%s",BUF);
    
    fclose(file);    
    getch();
}

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


Бывалый
*


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

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



Код

if(str[i] == '<')
{
    while(str[i + 1] != '>')
        BUF[i] += str[i+1];
}


Здесь i надо увеличивать, что то типа этого:

Код

if(str[i] == '<')
{
    while(str[++i] != '>') {
        BUF[i] += str[i];
    }
}


А лучше будет объединить считывание символа из файла и проверку.

Это сообщение отредактировал(а) Maka6er - 11.3.2008, 20:15
PM MAIL   Вверх
korian
Дата 11.3.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

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



если исправлять то, что есть, вот что можна получить.
программа читает 99 символов (если файл не меньше) из файла и выводит теги, содержащиеся в этих 99-и символах.

Код

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

void main()
{
    FILE *file;
    char *name = "C:\\DATA.html";
    char str[100];
    char BUF[100];
    int i;

    file = fopen(name,"r");
    if (!file)
       return;
    fgets(str, sizeof(str), file);
    printf("%s", str);

    for(i = 0; str[i] != 0; i++)
    {
        if(str[i] == '<')
        {
            int j;
            for (j = i; (str[i] != 0) && (str[i] != '>'); i++)
                BUF[i-j] = str[i];
            BUF[i - j] = 0;
            printf("%s",BUF);
        }
    }
    
    fclose(file);    
    getch();
}


если вы пишите на C++, а не на C, то тут надо переписывать все.


Это сообщение отредактировал(а) korian - 11.3.2008, 20:56
PM   Вверх
K0SHKA
Дата 12.3.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



korian  да пишу на С++
компилятор MSVC++ 6 smile 

Это сообщение отредактировал(а) K0SHKA - 12.3.2008, 11:04
PM   Вверх
bsa
Дата 12.3.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(K0SHKA @ 12.3.2008,  11:00)
korian  да пишу на С++
компилятор MSVC++ 6 smile

Судя по сообщениям на форуме этот компилятор стандарт С++ не поддерживает smile
Поэтому лучше писать на Си стандарта 1989 года (т.е. так, как ты и написала), хотя conio.h и не входит ни в какие стандарты...
PM   Вверх
comcon1
Дата 12.3.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

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



Maka6er,  никогда!! слышите, НИКОГДА не изменяйте переменной цикла for в теле цикла. Даже если это очевидно. Код становится КРАЙНЕ неустойчивым!



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


Эксперт
****


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

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



Цитата(comcon1 @ 12.3.2008,  12:29)
Maka6er,  никогда!! слышите, НИКОГДА не изменяйте переменной цикла for в теле цикла. Даже если это очевидно. Код становится КРАЙНЕ неустойчивым!

Как иначе сделать это?
Код
typedef std::list<std::string> StringList;
StringList list;
...
for(StringList::iterator i = list.begin(), end = list.end(); i != end; ++i) {
     if (*i == "priver")
           list.erase(i--);
}

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

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



тут ты как бы изменил ее, но как бы и нет). это как раз для сохранения стабильности цикла. итераторы - ваще отдельная песня. 

я бы в аналогичных твоему примерах юзал while. этот-то слишком простой. Я, бывает, вообще, чтобы не путаться с такой фигней делаю копию контейнера, смотрю в одном, а правлю в другом.


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


Эксперт
****


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

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



Цитата(comcon1 @ 12.3.2008,  13:21)
Я, бывает, вообще, чтобы не путаться с такой фигней делаю копию контейнера, смотрю в одном, а правлю в другом.

Имхо, слишком высокая плата за непонятно что.
PM   Вверх
K0SHKA
  Дата 12.3.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(korian @ 11.3.2008,  20:20)
если вы пишите на C++, а не на C, то тут надо переписывать все.


Теперь начинаю понимать отличия Си от Си++, до этого пользовалась справочником функций Си, есле вы знаете де можно почитать српавочник по функциям именно С++ в электронном виде, пожалуйста поделитесь.
Заранее благодарю за ваши ответы! 
PM   Вверх
korian
Дата 12.3.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

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



Цитата(K0SHKA @  12.3.2008,  16:19 Найти цитируемый пост)
есле вы знаете де можно почитать српавочник по функциям именно С++ в электронном виде, пожалуйста поделитесь

я не знаю.
если кто-то выложит, тоже б почитал.
PM   Вверх
Dronchik
Дата 13.3.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


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

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



K0SHKA, Отличия С++ от С
А для справочника MSDN вполне подходит.


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

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


Эксперт
****


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

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



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

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

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

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

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


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

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


 




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


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

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