#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;
}
STL: Элегантное решение для string
Есть строка типа string, следующего вида: "spec:: option1;option2;...;optionN" (без пробела после :: ).
Требуется получить 2 строки string, которые будут содержать, соответственно: "spec" и "option1;option2;...optionN".
Задача в том, как это решить элегантнее (правильнее). Возможностей - масса, и я несколько растерялся, так как c парсингом string не сталкивался :o
Например:
оффтоп пожалуй:
под .NET Regex выражение выглядело бы, например, так
Код:
^(?<spec>\w+)::(?:\w+;)*(?:\w+)$
Посмотрите этот компонент
Кстати, неплохая регулярка в составе boost.
Я бы применил в данном случае подход (с некоторыми вариациями), который указал Zorkus.
Решил так:
Код:
string str = "spec::option1;option2;...;optionN";
...
int offs = str.find('::');
string spec( str, 0, offs );
string options( str, offs + 2 );
...
...
int offs = str.find('::');
string spec( str, 0, offs );
string options( str, offs + 2 );
...