Нет необходимости перебирать строку, find
уже делает это. По умолчанию поиск начинается с начала, поэтому, как только мы нашли пробел, нам нужно начать следующий поиск из этого найденного пробела:
std::vector<std::string> words;
//find first space
size_t start = 0, end = sen.find(' ');
//as long as there are spaces
while(end != std::string::npos)
{
//get word
words.push_back(sen.substr(start, end-start));
//search next space (of course only after already found space)
start = end + 1;
end = sen.find(' ', start);
}
//last word
words.push_back(sen.substr(start));
Конечно, это не обрабатывает повторяющиеся пробелы, начальные или конечные пробелы и другие особые случаи. На самом деле было бы лучше использовать поток строк:
#include <sstream>
#include <algorithm>
#include <iterator>
std::istringstream stream(sen);
std::vector<std::string> words(std::istream_iterator<std::string>(stream),
std::istream_iterator<std::string>());
Затем вы можете просто выпустить их так, как вам нравится, или просто сделать это прямо в циклах без использования вектора:
for(std::vector<std::string>::const_iterator iter=
words.begin(); iter!=words.end(); ++iter)
std::cout << "found word: " << *iter << '\n';