Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

STL: Элегантное решение для string

9
12 февраля 2007 года
Lerkin
3.0K / / 25.03.2003
Коллеги, вопрос такой.
Есть строка типа string, следующего вида: "spec:: option1;option2;...;optionN" (без пробела после :: ).
Требуется получить 2 строки string, которые будут содержать, соответственно: "spec" и "option1;option2;...optionN".

Задача в том, как это решить элегантнее (правильнее). Возможностей - масса, и я несколько растерялся, так как c парсингом string не сталкивался :o
63
12 февраля 2007 года
Zorkus
2.6K / / 04.11.2006
Например:
Код:
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

int main()
{
    string str= "spec::option1;option2;...;optionN";
    string spec = str.substr(0 ,  str.find(':'));
    cout << spec << endl;
    string options = str.substr(str.find(':')+2 );
    cout <<  options << endl;
    return EXIT_SUCCESS;
}
5
13 февраля 2007 года
hardcase
4.5K / / 09.08.2005
Я бы использовал регулярные выражения (полагаю "option1;option2;..." тоже придётся разбирать), но к сожалению не знаю библиотек на С++ для работы с ними.

оффтоп пожалуй:
под .NET Regex выражение выглядело бы, например, так
 
Код:
^(?<spec>\w+)::(?:\w+;)*(?:\w+)$
284
13 февраля 2007 года
michael_is_98
587 / / 25.02.2005
Посмотрите этот компонент
3
13 февраля 2007 года
Green
4.8K / / 20.01.2000
Регулярка здесь, как из пушки по воробьям.
Кстати, неплохая регулярка в составе boost.

Я бы применил в данном случае подход (с некоторыми вариациями), который указал Zorkus.
9
13 февраля 2007 года
Lerkin
3.0K / / 25.03.2003
Всем спасибо за внимание и помощь. Компонент достаточно интересный для изучения.
Решил так:
 
Код:
string str = "spec::option1;option2;...;optionN";

    ...
    int offs = str.find('::');

    string spec( str, 0, offs );
    string options( str, offs + 2 );
    ...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог