Здравствуйте, 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);
}