Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2011, 01:53   #1
Neolit1819
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 51
Вопрос CString поиск подстрок

Добрый день помогите подкорректировать алгоритм.
Дано - CString str,str1.
str допустим имеет вид "-----<t>---</t>-------<t>----</t>" и т.д. Нужно в str1 записать все, что между тегами. Как я делаю
Код:
int i=0,l=0;
	int p,p1,p2;
	l= str.GetLength();
	while(i<3) // к примеру прогоним 3 раза
	{
		p =  str.Find(_T("<t>"));
		p1 = str.Find(_T("</t>"));
		p2 = p1 - p;
		str1+=str.Mid(p,p2);
		str=str.Mid(p1,l-p1); //обрезаем строку
		i++;
	}
Собственно выводит текст только между первыми тэгами где я просщитался?

Последний раз редактировалось Neolit1819; 20.04.2011 в 02:08.
Neolit1819 вне форума Ответить с цитированием
Старый 20.04.2011, 12:53   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
str=str.Mid(p1,l-p1)
Вот тут.
Ты обрезаешь строку таким образом, что в ее начале стоит тэг </t>, а тебе надо обрезать и его тоже.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 20.04.2011, 13:47   #3
Neolit1819
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 51
По умолчанию

Подкорректировал, с копированием и обрезанием
Код:
int i=0,l=0;
	int p,p1,p2;
	l= str.GetLength();
	while(i<10)
	{
		p =  str.Find(_T("<t>"));
		p1 = str.Find(_T("</t>"));
		p2 = p1 - p;
		str1+=str.Mid(p+5,p2-5);
		str=str.Mid(p1,l-p1-4);
		i++;
	}


MyEdit2->SetWindowText(str1);
все равно добовляется только первое включение, в чем дело не пойму...проверял обрезнноую строку, тэги есть, но почему то текст не выбирает
Neolit1819 вне форума Ответить с цитированием
Старый 20.04.2011, 15:27   #4
Neolit1819
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 51
По умолчанию

все разобрался) затупил не много)Mandrivnyk спасибо
Neolit1819 вне форума Ответить с цитированием
Старый 20.04.2011, 17:43   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Neolit1819, я же Вам скинул парсер-класс. Там всё это имеется. Подключайте и пользуйтесь.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 20.04.2011, 22:34   #6
Neolit1819
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 51
По умолчанию

Smitt&Wesson, да благодарю вас за это, к сожелению или к счастью моя задача именно создать его самому(пускай и просто) в целях обучения.

Кстати еще вопрос, как лушче всего найти колличество вхождений подстроки в CString (юникод)
пытаюсь так,
Код:
CString str;
_TCHAR * point;
   point =str.GetBuffer();
	while(point = strstr(point,"<w:t>" ))
    point++, n++;
ругается, что нет подходящих пораметров для перегрузки strstr, как лечить? или есть способ по проще

Последний раз редактировалось Neolit1819; 20.04.2011 в 22:48.
Neolit1819 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск строки и всех её подстрок в файле Крякозябр Общие вопросы C/C++ 1 24.05.2010 12:53
Замена подстрок (str_replace) Linel PHP 2 16.05.2009 18:00
Выделение подстрок из строки AmXSe Помощь студентам 4 14.03.2009 06:51
CString Артэс Общие вопросы C/C++ 5 25.01.2009 20:36
Указатели на CString bondik Общие вопросы C/C++ 5 07.01.2009 23:12