forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   разбиение текста (http://forum.boolean.name/showthread.php?t=15625)

RegIon 10.10.2011 16:28

разбиение текста
 
есть длинный текст,нужно разбить его на мелкие куски,определённой длины...причем желательно чтоб также при встрече символа "\n" разбивал на новую строку....не могу понять..
пример:
"это длинная строка \n как мне ее посечь,ваываываываываывыав"
итог:
"это длинная строка"
"как мне ее посечь,ва"
"ываываываываывыав"

SBJoker 10.10.2011 16:52

Ответ: разбиение текста
 
Рубим строки сначала по \n потом перебираем получившиеся строки и рубим по длине. Можно делать сразу одним проходом.

RegIon 10.10.2011 16:58

Ответ: разбиение текста
 
ну это понятно,но как потом эти строки в двумерный масив [длина][количество] запихать....вот в чем косяк(Cи)

RBK 10.10.2011 17:09

Ответ: разбиение текста
 
Хранение данных здесь самая простая часть. Используй линейный связный список например.

RegIon 10.10.2011 17:12

Ответ: разбиение текста
 
ну и как это на си реализовать ?? потом отрисовать текст по буквам из этих строк??

pax 10.10.2011 17:26

Ответ: разбиение текста
 
Цитата:

Сообщение от Костян (Сообщение 205317)
ну и как это на си реализовать ?? потом отрисовать текст по буквам из этих строк??

IGR? )

Reks888 10.10.2011 17:33

Ответ: разбиение текста
 
Сначала режешь по /n и заносишь в массив стрингов.
Потом проходишься по ячейкам массива и лишние буквы в конце переносишь в начало следующей ячейки.
Не пойму зачем двумерный массив, можно длину всегда потом найти с помощью strlen(lolo[50])
Рисовать текст это cout<<lolo[50] или на экране?

Предъявить код, точно описать какой момент вызывает трудности.

RegIon 10.10.2011 17:38

Ответ: разбиение текста
 
Цитата:

Сначала режешь по /n и заносишь в массив стрингов.
Потом проходишься по ячейкам массива и лишние буквы в конце переносишь в начало следующей ячейки.
Не пойму зачем двумерный массив, можно длину всегда потом найти с помощью strlen(lolo[50])
Рисовать текст это cout<<lolo[50] или на экране?

Предъявить код, точно описать какой момент вызывает трудности.
ммм..вопервых я РИСУЮ картиночными буковками на экране портативного устроиства на платформе ARM,во вторых язык СИ а не с++(сори что сразу не написал)

Reks888 10.10.2011 17:55

Ответ: разбиение текста
 
Тогда совмести каждую отдельную картиночную буковку с ASCII кодом буквы, который ты получишь с помощью (int) lolo[50] и выводи по одной буковке, да.
Извиняюсь если что не так, никогда не программировал на портативных устройствах на платформе ARM. Надеюсь у них такое работает

RegIon 11.10.2011 10:29

Ответ: разбиение текста
 
да,так рулит...но он пишет тока строки:
Код:

void DrawTextEx(font_type font,int x,int y,char* text)
{ uint16_t ch=0,chr,f_i=(uint16_t)((font.f_width-font.f_rans)*.5);
 for(ch=0;ch<csize(text);ch++){
    chr=text[ch];
    drawimage(font.handle,x+(ch*font.f_rans),y,((chr%16)*font.f_width)+f_i+font.f_w_err,(chr>>4)*font.f_height+font.f_h_err,font.f_rans,font.f_height,1);
}
   
}

слегка длинный.....
я вроде даже придумал алгаритм отсекать по словам(перенос по словам)...


Часовой пояс GMT +4, время: 11:06.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot