Я бы хотел использовать библиотеку Boost's Regex для разделения строки, содержащей метки и цифры, на токены.Например, 'abc1def002g30'
будет разделен на {'abc','1','def','002','g','30'}
.Я изменил пример , приведенный в документации Boost, чтобы получить следующий код:
#include <iostream>
#include <boost/regex.hpp>
using namespace std;
int main(int argc,char **argv){
string s,str;
int count;
do{
count=0;
if(argc == 1)
{
cout << "Enter text to split (or \"quit\" to exit): ";
getline(cin, s);
if(s == "quit") break;
}
else
s = "This is a string of tokens";
boost::regex re("[0-9]+|[a-z]+");
boost::sregex_token_iterator i(s.begin(), s.end(), re, 0);
boost::sregex_token_iterator j;
while(i != j)
{
str=*i;
cout << str << endl;
count++;
i++;
}
cout << "There were " << count << " tokens found." << endl;
}while(argc == 1);
return 0;
}
Количество токенов, хранящихся в count
, является правильным.Однако *it
содержит только пустую строку, поэтому ничего не печатается.Любые предположения относительно того, что я делаю неправильно?
РЕДАКТИРОВАТЬ: согласно исправлению, предложенному ниже, я изменил код, и теперь он работает правильно.