Если бы я проверял это, я бы увидел это и предположил, что то, что вы действительно пытаетесь сделать, - это токенизация строки, и уже есть хорошие способы сделать это.
Лучший способ сделать это - boost::tokenizer
. Он позволяет вам указать способ разделения строки, а затем предоставляет удобный интерфейс итератора для перебора каждого значения.
using namespace boost;
string sample = "Hello,My,Name,Is,Doug";
escaped_list_seperator<char> sep("" /*escape char*/, ","/*seperator*/, "" /*quotes*/)
tokenizer<escaped_list_seperator<char> > myTokens(sample, sep)
//iterate through the contents
for (tokenizer<escaped_list_seperator<char>>::iterator iter = myTokens.begin();
iter != myTokens.end();
++iter)
{
std::cout << *iter << std::endl;
}
Выход:
Hello
My
Name
Is
Doug
Редактировать Если вам не нужна зависимость от повышения, вы также можете использовать getline
с istringstream
, как в в этом ответе . Чтобы скопировать несколько из этого ответа:
std::string str = "Hello,My,Name,Is,Doug";
std::istringstream stream(str);
std::string tok1;
while (stream)
{
std::getline(stream, tok1, ',');
std::cout << tok1 << std::endl;
}
Выход:
Hello
My
Name
Is
Doug
Возможно, это не напрямую , что вы просите, но я думаю, что это решает общую проблему, которую вы пытаетесь решить.