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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разбор буфера с содержимым файла... 
:(
    Опции темы
ZC1989
Дата 23.12.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Rockie, какой остальной? ну ладно, вот остальное

Код

ZC_STRPROC    Str;

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmd, int nShowCmd)
{
    Str.create("one two");

    Str.get_word();

    return 0;
}


врятли это имеет смысл... проблема в самом зачатке класса (это набросок, а не релиз!)


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
ZC1989
Дата 23.12.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



впринципе вышел из положения оздав класс с одним char'овским эллементом,и определив список от этой структуры, но всё же, как можно заставить работать мой пример? smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Anikmar
Дата 23.12.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



У меня возникла пара вопросов
1.
Цитата

char    BufferTemp[MAX_PATH];


А почему временный буфер такого странного размера? При чем тут максимальный размер имени файла с путем? Или я чего-то не догоняю?

2.
Цитата

std::vector <char *> String;


Вектор - штука классная. Создает одномерный массив любого указанного типа. Таким образом мы создаем вектор указателей на строку. А где мы выделяем память под конкретную строку? Я что-то не нашел... Т.е. я не нашел места, где этот вектор указателей инициализируется. Может проще использовать все-таки string? (в смысле vector<std::string>)
PM MAIL ICQ   Вверх
ZC1989
Дата 23.12.2006, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Anikmar, я про стринг только слышал что он есть...
Цитата

При чем тут максимальный размер имени файла с путем? Или я чего-то не догоняю?

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

Цитата

А где мы выделяем память под конкретную строку?

а как выделять память под эти конкретные объекты?


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Anikmar
Дата 23.12.2006, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(ZC1989 @  23.12.2006,  23:11 Найти цитируемый пост)
а как выделять память под эти конкретные объекты? 

Используй vector<std::string> вместо Vector<char*>
По std::string прочитай HELP - в принципе то же самое, что AnsiString в моем примере.

Просто я использовал VCL вместо STL
Если пишешь на VC - то там наверняка есть аналог AnsiString

Добавлено @ 23:34 
Кстати, заглянул в борландовский хелп по STL и увидел интересный пример использования string
Цитата

In this section we illustrate the use of some of the string functions by defining a function to split a line of text into individual words. We have already made use of this function in the concordance example program.

Note:    The split function is in the concordance program in file concord.cpp.

There are three arguments to this function. The first two are strings, describing the line of text and the separators to be used to differentiate words, respectively. The third argument is a list of strings, used to return the individual words in the line.

void split 
  (string & text, string & separators, list<string> & words)
{
  int n = text.length();
  int start, stop;
  start = text.find_first_not_of(separators);
  while ((start >= 0) && (start < n)) {
     stop = text.find_first_of(separators, start);
     if ((stop < 0) || (stop > n)) stop = n;
     words.push_back(text.substr(start, stop - start));
     start = text.find_first_not_of(separators, stop+1);
     }
}

The program begins by finding the first character that is not a separator. The loop then looks for the next following character that is a separator, or uses the end of the string if no such value is found. The difference between these two is then a word, which is copied out of the text using a substring operation and inserted into the list of words. A search is then made to discover the start of the next word, and the loop continues. When the index value exceeds the limits of the string
, execution stops.


Так что твоя задача не нова  smile 
PM MAIL ICQ   Вверх
ZC1989
Дата 23.12.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



пасиб, интересный хелп... попробую smile 
щас у меня извращенский вариант, но всё же вариант

Код

// типа структура
typedef struct{
    char        string[MAX_PATH];
} word;


class    ZC_STRPROC{
private:
    word                TempWord;
    std::vector <word>    String;
    std::vector <word>    ::iterator iString;
...

после таких вещей сам себя начинаю бояться!


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Anikmar
Дата 24.12.2006, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну почему 
Цитата

char string[MAX_PATH];


Откуда тут MAX_PATH? Размер буфера должен быть равен размеру всего разбираемого текста. Вдруг он будет состоять из одного длинного слова?

Кстати вариант моей функции под stl - надо было изменить в трех местах (ну и прототип самособой)
Код

void MAN_TextToWords(string &Text, vector<string> &ResultWords)
{
    int i,j;
    int Len;
    char *Buff;
    char CurrentSymbol;

    Len = Text.length();
    Buff = new char[Len+1];

    j = 0;
    for (i=0;i<Len;i++)
    {
        CurrentSymbol = Text[i];
        if ((CurrentSymbol == ' ')||
            (CurrentSymbol == '\t')||
            (CurrentSymbol=='\n')||
            (CurrentSymbol=='\r'))
        {
            if (j > 0)
            {
                Buff[j] = 0;
                ResultWords.push_back(string(Buff));
                j = 0;
                Buff[j] = 0;
            }
        }
        else
        {
            Buff[j++] = CurrentSymbol;
        }
    }


    if (j > 0)
    {
        Buff[j] = 0;
        ResultWords.push_back(string(Buff));
    }
    delete [] Buff;
}


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


Опытный
**


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

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



Anikmar, почему?
Код

Откуда тут MAX_PATH? Размер буфера должен быть равен размеру всего разбираемого текста

почему нельзя для одного экземпляра (для одного слова) нельзя объявить максимальный размер? что в этом плохого? я подстраховываюсь как раз на тот случай если получившееся слово будет большого размера...


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Rockie
Дата 24.12.2006, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код
void ShowMyVector(vector<string> v)
{
    // перебираем эл-ты вектора и выводим на дисплей
    vector<string>::iterator p=v.begin();  
    while(p!=v.end())
       { cout<<*p<<'\n';
         p++;
       }
}

int main()
{
    vector<string> buf;

     // добавляем элементы в вектор. Выделение памяти берет на себя вектор
     buf.push_back("One"), buf.push_back("Two"), buf.push_back("Some"), 
     buf.push_back("Other"),  buf.push_back("Words");
     
     // производим какие-то действия с элементами
     sort(buf.begin(),buf.end());               

     ShowMyVector(buf);

     return 0;
}






--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Anikmar
Дата 24.12.2006, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(ZC1989 @  24.12.2006,  00:25 Найти цитируемый пост)
почему нельзя для одного экземпляра (для одного слова) нельзя объявить максимальный размер? что в этом плохого? я подстраховываюсь как раз на тот случай если получившееся слово будет большого размера... 


MAX_PATH - Это максимальная длина имени файла. Она не такая уж большая! У меня, например, она 260. Слово может быть длинее.

Это сообщение отредактировал(а) Anikmar - 24.12.2006, 00:38
PM MAIL ICQ   Вверх
ZC1989
Дата 24.12.2006, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Anikmar, завязываю с MAX_PATH... нафиг... smile щас заюзаю string

Добавлено @ 00:50 
Rockie, какой хендл надо подключить что бы string определялся?

ЗЫ: у меня Visual


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
zabivator
Дата 24.12.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ZC1989, #include <string>

Добавлено @ 21:37 
не забываем про std::
т.е. std::string

Добавлено @ 21:37 
А include правильно написан) 
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Rockie
Дата 25.12.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(ZC1989 @  24.12.2006,  00:42 Найти цитируемый пост)
Добавлено @ 00:50 Rockie, какой хендл надо подключить что бы string определялся?


Цитата(Rockie @  23.12.2006,  20:19 Найти цитируемый пост)
ZC1989, а где остальной код?


Цитата(ZC1989 @  23.12.2006,  20:58 Найти цитируемый пост)
Rockie, какой остальной? ну ладно, вот остальное


Цитата(ZC1989 @  23.12.2006,  20:58 Найти цитируемый пост)
врятли это имеет смысл... 


Цитата(ZC1989 @  24.12.2006,  00:42 Найти цитируемый пост)
Rockie, какой хендл надо подключить что бы string определялся?ЗЫ: у меня Visual


Код
#include "stdafx.h"

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>

using namespace std;






--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
ZC1989
Дата 28.12.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Anikmar, слушай, я чего-то не соображу, как получается тогда мне задавать размер строки не используя MAX_PATH? ведь я узнаю размер слова только после его компановки, а на это этапе надо уже знать размер...? smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

 
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.