Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Разбиение строки с разделителем на подстроки (С++)

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> Разбиение строки с разделителем на подстроки (С++)
Имя
Сообщение << Старые топики   Новые топики >>
Разбиение строки с разделителем на подстроки (С++) - 2006-08-02 01:42:37   
voody

Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
Всем привет! Есть строка (массив char) приблизительно следующего содержания:
char string[] = "Line_1\nLine_2\nLine_3\nLine_4";
Каким образом можно текст между \n(т.е. Line_1, Line_2, и т.д.) поместить построчно в TListBox в C++ Builder''е? Т.е. нужно разбить строку на массив подстрок с разделителем \n. Знаю, что в PHP и в JavaSсгiрt есть такая функция, а это си-подобные языки. Может и в C++ такая функция тоже есть? Заранее спасибо за помощь!
Post #: 1
Разбиение строки с разделителем на подстроки (С++) - 2006-08-02 02:00:12   
Python

Сообщений: 4964
Оценки: 0
Присоединился: 2005-12-14 08:32:13
Voody, не уверен, что тут есть по теме, но может и пригодится:

как &quot;подстроить&quot; размер окна браузера под ширину сайта?




Конференции VBStreets : Просмотр темы - Обработка строк



INTUIT.ru: Курс: Язык программирования . Лекция Ж6: Обработка текстов …



&#1069;та строка является этаким шаблоном для поиска подстроки.



Подольск



POS - Поиск подстроки в строке



explode – Разбивает строку на подстроки


(pdf)
untitled



 explode



КЛУБ ПРОФЕССИОНАЛОВ 1С - Каталог разработок - Разбиение строк



Учебник PHP информационные технологии обучение персонала
Post #: 2
Разбиение строки с разделителем на подстроки (С++) - 2006-08-03 21:36:50   
Kill_em_all

Сообщений: 395
Оценки: 0
Присоединился: 2005-03-25 22:40:01
Не знаю как в билдере, а в MS VC++
так(возможны ошибки):

char string[1024];
char parsed[];
int i=0;
strcpy(string,"Line_1\nLine_2\nLine_3\nLine_4");
char temp=strtok(string, "\n");
while(temp)
{
temp=strtok(NULL, "\n");
if(!temp) break;
strcpy(parsed,temp);<BR> i++;<BR>}
Post #: 3
Разбиение строки с разделителем на подстроки (С++) - 2006-08-04 00:25:11   
ien

Сообщений: 18
Оценки: 0
Присоединился: 2004-08-20 00:12:46
int GetParamFromStringAmount(char* szString, char chSep, int iAmount)
{
szString[iAmount] = 0;
int iCounter = 0;
iAmount = 0;
while(szString[iAmount])
{
if(szString[iAmount] == chSep) iCounter++;
iAmount++;
}
return iCounter + 1;
}
char* GetParamFromString(char* szString, char chSep, int iAmount, int iNumb)
{
szString[iAmount] = 0;
iAmount = 0;
while((iNumb > 0) && (szString[iAmount]))
{
if((szString[iAmount] == chSep) || (szString[iAmount] == 0)) iNumb–;
iAmount++;
}
if(iNumb != 0) return NULL;
iNumb = iAmount;
while(szString[iNumb])
{
if(szString[iNumb] == chSep) break;
iNumb++;
}
iNumb -= iAmount; iNumb++;
char *a = new char[iNumb];
if(a == 0) return NULL;
for(int i = 0; i < iNumb; i++) a = szString;<BR> a[iNumb - 1] = 0;<BR> return a;<BR>}<BR><BR>Извини, мне слегка лениво что-то еще писать…<BR>&#1069;то фрагмент из моей &quot;НеСтандартной библиотеки&quot;( NSTL =) ).<BR>Первая процедура выдает количество элементов по строке и расзделителю.<BR>Вторая - выдает сами элементы.<BR>Думается, что посидев минут 15 сделаешь то, что надо и может найдешь пару ошибок =) .<BR>вот тут тоже самое, но с табуляциями… =)
Post #: 4
Разбиение строки с разделителем на подстроки (С++) - 2006-08-04 02:54:53   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
как всё сложно и мудрёно вы делаете…

вот как надо. никаких левых выделений/освобождений памяти. можно конечно ещё поыбаццо, чтобы str_start убрать и поменьше проверок во внутреннем цикле сделать (хотя компилер должён вроде это сам сделать), но кому надо, тот пускай этим и занимается.
char *str = "line1\nline2\nline3\nline4";
char *start, *end;
int str_ends = 0;

for (start = str; !str_ends; start = end) {
for (end = start; end != '\0'; end ++) {
if (*end == '\n')
*end = '\0';
else if (*end == '\0')
str_ends = 1;
}
/* здесь мы имеем вполне себе C строку. её можно куда-нть скопировать используя strcpy
* я воспользуюсь гипотетической функцией add_line_to_tlistbox,
* которая ничего не знает про происхождение строки и её дальнейшую судьбу */
add_line_to_tlistbox (start);
if (!str_ends) *end = '\n'; /* вернём всё взад как было */
}

единственный небонус такого подхода – не получиться на str навесить modifier const. Но это уже мелочи.
Post #: 5
Разбиение строки с разделителем на подстроки (С++) - 2006-08-04 04:38:08   
voody

Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
Всем спасибо за помощь! Выбрал самый простой вариант с strtok:

char string[] = "Line_1\nLine_2\nLine_3\nLine_4";
char *substring = strtok(string, "\n");
ListBox1->Items->Add(AnsiString(substring));
for (;;) {
substring = strtok(NULL, "\n");
if (substring == NULL) break;
ListBox1->Items->Add(AnsiString(substring));
}
Post #: 6
Разбиение строки с разделителем на подстроки (С++) - 2006-08-06 02:05:29   
ien

Сообщений: 18
Оценки: 0
Присоединился: 2004-08-20 00:12:46
&gt; как всё сложно и мудрёно вы делаете…
Извини пжлста… но в том, что ты написал… нет функционала того, что написал я…
Да, я решаю более общую проблему, однако, мне казалось, что автору темы охота написать что-то наподобие explode() в php…
&gt;Выбрал самый простой вариант с strtok
Правильно! =)
Post #: 7
Страниц:  [1]
Все форумы >> [Веб-программинг] >> Разбиение строки с разделителем на подстроки (С++)







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.