Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: нужна помощь со строкой символов!  (Прочитано 12097 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« : 22-04-2009 05:46 » 

ситуация такая, приходит сообщение
нужна проверка на символы '<' и '>' (символ '<' на проверку ВСЕГДА ПЕРВЫЙ)
если оба то вытащить что внутри них, а остальное сообщение в другую переменную
если один из них это целиком сообщение, и если их нет тоже целиком, и если '<' не первый то тоже целиком  (с символами '<' '>')
вот мой код:
Код:
for (int i =0; i<nLen; i++)
                          {
                            if (buf[0]=='<')
                               {
                                 i++;
                                 temp=buf[0];
                                 while (1)
                                    {
                                      if(buf[i]!='>' && buf[i]!='\0')
                                      {
                                        o+=buf[i];  // вытаскиваем
                                        i++;
                                      }
                                      else
                                          break;
                                    }
                               }
                            else
                              pp+=buf[i];
                          }
                      if (!(TryStrToInt(o,z)))
                          {
                            pp=temp+o;
                          }
как его довести до ума?
Записан

Улыбаюсь Ага
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 22-04-2009 05:50 » 

ну ты и объяснять ) Ничего ж непонятно

то есть, сообщение заключено между угловыми скобками ? А внутри могут быть такие симвода как данные ?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 22-04-2009 06:02 » 

что нибудь вроде этого
Код:
const char* test="eee<445456>mmmm";

const char* pCur=test;

const char* p1=0;
const char* p2=0;
const char* pNext=0;

for(;pCur;)
{
p1=0;
p2=0;

p1=::strchr(pCur,'<');
if(!p1)break;

pNext=::strchr(p1+1,'<');

p2=::strchr(p1+1,'>');
if(!p2)break;
if(pNext && p2>=pNext)break;

//*p1 == '<' , *p2 == '>'
//данные начинаются в (p1+1)
//длина данных между скобками == p2-p1-1

//обработка данных
//...


pCur=pNext;
}

Записан

alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 22-04-2009 07:04 » 

ну ты и объяснять ) Ничего ж непонятно

то есть, сообщение заключено между угловыми скобками ? А внутри могут быть такие симвода как данные ?
эх... на примере может понятно будет
1)
in = "<190>rreeer"
out = "rreeer"
2)
in = "<hth>eef"
out = "<hth>eef"
3)
in = "<ttrrw"
out = "<ttrrw"
4)
in = "zzz<ffe>df"
out = "zzz<ffe>df"
5)
in = "yyy>ffee"
out = "yyy>ffee"
вот так, что я имел ввиду
Записан

Улыбаюсь Ага
alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 22-04-2009 07:05 » new

6)
in = "ttt<190>ff"
out = "ttt<190>ff"
Записан

Улыбаюсь Ага
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 22-04-2009 07:22 » 

то есть формат входной строки фиксированный:

<#>текст

?
Записан

alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 22-04-2009 07:45 » 

да. фиксирован
<число>текст
и выводить только текст
но вот если такой конструкциии не будет то выводить полностью
Записан

Улыбаюсь Ага
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 22-04-2009 07:51 » 

Тогда регулярные выражения в руки Улыбаюсь

Ну, или если хочется сделать всё вручную - то цепочка состояний автомата с переходами:
начальное состояние => открывающая скобка/текст
открывающая скобка => цифра/текст
цифра =>цифра/закрывающая скобка/текст
закрывающая скобка = финальное состояние, пропуск содержимого тега. Если достигли его, то содержимое не выводим. В остальных случаях выводим целиком.
Записан
alex87
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 22-04-2009 13:06 » 

Цитата
Тогда регулярные выражения в руки
это как понять?
Записан

Улыбаюсь Ага
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 22-04-2009 13:24 » 

Так и понять Улыбаюсь Велосипед иногда полезно изобретать, но если ситуация позволяет пользоваться готовым решением - надо найти это решение и пользоваться. Для регулярных выражений таких решений должно быть довольно много.
Записан
Рыжий Тигра
Гость
« Ответ #10 : 27-04-2009 09:42 » 

alex87, попробуй strtok()...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines