Разбиение на сроки...
От: Spider84 Россия http://spider.vc
Дата: 09.06.03 17:31
Оценка:
Всем привет!

Помогите разобрать получшенный (char *) на строки... с разделением между строк \r\n.
Я что-то запарился совсем... Отчаяный крик о помоци
Re: Разбиение на сроки...
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 09.06.03 19:43
Оценка:
Здравствуйте, Spider84, Вы писали:

S>Всем привет!


S>Помогите разобрать получшенный (char *) на строки... с разделением между строк \r\n.

S>Я что-то запарился совсем... Отчаяный крик о помоци


Только средствами С++ ? Тогда, навскидку:


#include <stdio.h>

void StrToStrList(const char* str)
 {

   int str_len = 0;
   const char* c = str;
    while(*c)
     {
      str_len++;
      c++;
     }

   char* cBuff = new char[str_len + 1];
   for(int i=0;i<str_len;i++)
     cBuff[i] = str[i];

   cBuff[str_len] = 0;

   char* cStrPtr = cBuff;
   char* cSavedPtr = cBuff;

   while(*cStrPtr)
    {
     if(*cStrPtr == '\r')
      {
        *cStrPtr = 0;
        cStrPtr++;

        *cStrPtr = 0;
        cStrPtr++;

        // просто печатаем строку
        printf(cSavedPtr);

        cSavedPtr = cStrPtr;
      }
     cStrPtr++;
    } // while

  // просто печатаем строку
  printf(cSavedPtr);

  delete [] cBuff;
 }


З.Ы. Перемудрил Без strlen и пр.

З.З.Ы. Просто не хотелось отвечать из серии — посмотрите в сторону функции strstr
Re: Разбиение на сроки...
От: MaximE Великобритания  
Дата: 10.06.03 07:30
Оценка:
Здравствуйте, Spider84, Вы писали:

S>Всем привет!


S>Помогите разобрать получшенный (char *) на строки... с разделением между строк \r\n.

S>Я что-то запарился совсем... Отчаяный крик о помоци

#include <iostream>
#include <string>

using namespace std;

const string delimeter("\r\n");

void f(const string& s)
{
    for (size_t b(0), e, l(s.size()); b < l && string::npos != (e = s.find(delimeter, b));
        b = e + delimeter.size())
    {
        cout << s.substr(b, e - b) << '\n';
    }
}

int main()
{
    f("line 1\r\nline 2\r\nline 3\r\n");
    return 0;
}
Re: Разбиение на сроки...
От: m.a.g. Мальта http://dottedmag.net/
Дата: 10.06.03 07:44
Оценка:
Здравствуйте, Spider84, Вы писали:

S>Помогите разобрать получшенный (char *) на строки... с разделением между строк \r\n.

S>Я что-то запарился совсем... Отчаяный крик о помоци

Раз уж пошла такая пьянка...

boost::tokenizer спасет отца русской демократии.
... << RSDN@Home 1.0 beta 7a 1.0.1227.39074>>
Re[2]: Разбиение на сроки...
От: MaximE Великобритания  
Дата: 10.06.03 07:58
Оценка:
Здравствуйте, m.a.g., Вы писали:

MAG>Здравствуйте, Spider84, Вы писали:


S>>Помогите разобрать получшенный (char *) на строки... с разделением между строк \r\n.

S>>Я что-то запарился совсем... Отчаяный крик о помоци

MAG>Раз уж пошла такая пьянка...


MAG>boost::tokenizer спасет отца русской демократии.


Тогда можно и spirit заюзать

EBNF грамматика такая:
lines ::= line (delimeter line)*;
line ::= (string - delimeter);
string ::= any_character+;
delimeter ::= '\r' '\n';
Re: Разбиение на сроки...
От: AndersZ  
Дата: 10.06.03 12:52
Оценка:
Здравствуйте, Spider84, Вы писали:

S>Всем привет!


S>Помогите разобрать получшенный (char *) на строки... с разделением между строк \r\n.

S>Я что-то запарился совсем... Отчаяный крик о помоци
Если работаете в Борланде, попробуйте

AnsiString MyString; // твоя строка - как ее сделать из *char, сам реши... :) 
. . . . 
TStringList *pList = new TStringList;
pList->Text = MyString;

после чего разбираешь свои строки из pList`a на здоровье...
Re: Разбиение на сроки...
От: SergeyS  
Дата: 10.06.03 16:07
Оценка:
Здравствуйте, Spider84, Вы писали:

S>Помогите разобрать получшенный (char *) на строки... с разделением между строк \r\n.

S>Я что-то запарился совсем... Отчаяный крик о помоци :)

Еще вариант разбора char* s:

    for (char* line = strtok(s, "\r\n"); line; line = strtok(NULL, "\r\n"))
        UseLine(line);
Re[2]: Разбиение на сроки...
От: Spider84 Россия http://spider.vc
Дата: 10.06.03 16:23
Оценка:
Здравствуйте, Flamer, Вы писали:

S>>Помогите разобрать получшенный (char *) на строки... с разделением между строк \r\n.

S>>Я что-то запарился совсем... Отчаяный крик о помоци
F>Только средствами С++ ? Тогда, навскидку:
F>
F>        // просто печатаем строку
F>        printf(cSavedPtr);
А вот можно как-нить типа этого:
[ccode]
char **strs;

strs=malloc(strs_count);
...
//вместо printf(cSavedPtr);
strs=realloc(strs,strs_count++);
memcpy(strs[strs_count-1],cSavedPtr,strlen);
...

???
Я точно не знаю как, я ещё в C++ Не силён. Помогите!!
Как я понимаю в итоге я могу получить массив строк...

F>З.Ы. Перемудрил Без strlen и пр.

F>З.З.Ы. Просто не хотелось отвечать из серии — посмотрите в сторону функции strstr
И правильно, так и надо было. Большое спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.