Re: Multistring в памяти
От: Аноним  
Дата: 08.11.06 21:42
Оценка:
Здравствуйте, Serg-o-65535, Вы писали:

SO6>Уважаемые господа, помогите новичку решить тревиальную задачу

SO6>Поиск по форумам/Google дал мне много ответов, но они либо не совсем то, что нужно, либо еще больше запутали.
SO6>Я плавно мигрирую с Delphi на С++, и многие вещи для меня пока не очевидны, хотя Герберт Шилдт уже снитнся

SO6>Вопрос такой:

SO6>У меня есть в памяти целиком содержимое текстового файла (классиеский мультитринг).
SO6>На начало этого блока есть укзатель вида void *p. Известна длина этого блока в байтах.
SO6>Задача- в цикле перебрать все строки этого блока.
SO6>Сейчас я иду циклом по всему боку, плюсуя в токен очередной символ, пока не дойду до '\0', и тогда это очередная строка.

SO6>Но сдаётся мне что это извращение Наверняка какой-нибудь sscanf это умеет быстрее и надёжнее.

SO6>Подскажите, пожалуйста, в какую сторону копть.

SO6>Заранее спасибо.

SO6>С уважением, Троицкий Сергей.

Можно, например, так

#include <string>
#include <vector>
#include <sstream>

using namespace std;

void *p = "Hello,\n world!";    // Исходные данные
int text_length = 15;

vector<string> lines;   // Этот вектор будет содержать строки, встретившиеся в тексте

// Для разбиения используем строковые потоки
string text(static_cast<char *>(p),text_length), line;
istringstream line_splitter(text);

while(getline(line_splitter,line)) // Читаем очередную строку и сохраняем её в векторе
{
    lines.push_back(line);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.