boost :: split (result, input, boost :: is_any_of ("(,)")) не может разделить пустое пространство - PullRequest
1 голос
/ 19 июня 2020

код:

vector<string> result;
string input = "Ellipse(50, 50, 200, 300)"
boost::split(result, input, boost::is_any_of("(, )"))

int i=0;
for (auto at=result.begin(); at != result.end(); at++)
    cout << ++i << " " << *at << endl;

вывод:

1 Ellipse
2 50
3 
4 50
5 
6 200
7
8 300
9

Я хочу получить только эллипс и целые числа, а не пустое пространство.

Как я могу получить правильный результат?

нельзя изменить входную строку.

1 Ответ

2 голосов
/ 19 июня 2020

Это удалит пустые места должным образом: erase_all(str1, " ");.

Другой альтернативой будет использование boost::token_compress_on:

boost::trim_if(input, boost::is_any_of(" "));
boost::split(result, input, boost::is_any_of("(, )"), boost::token_compress_on);

Этот вопрос уже задавался: boost :: split оставляет пустые токены в начале и в конце строки - это желаемое поведение? и Как использовать ускоренное разбиение для разделения строки и игнорирования пустых значений?

...