Считанную из файла строку можно разбить по пробелам вот так:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
int main() {
std::string str{"This string in file"};
std::stringstream s(str);
std::vector<std::string> vec;
std::string word{""};
while(s >> word) vec.push_back(word);
for(auto &i : vec) std::cout << i << '\n';
return 0;
}
Или с помощью регулярного выражения:
#include <iostream>
#include <regex>
#include <string>
#include <vector>
int main() {
std::string str{"Hello! This string of your file"};
std::regex reg{"\\S+"};
std::vector<std::string> vec;
std::smatch sm;
while(std::regex_search(str, sm, reg)) {
vec.push_back(sm.str());
str = sm.suffix();
}
for(auto &i : vec) std::cout << i <<' \n';
return 0;
}
Или реализовать указанный в первом ответе алгоритм:
#include <iostream>
#include <string>
#include <vector>
void split(std::string& str, std::vector<std::string>& vec) {
std::string tmp{""}, delimiter{".!?"};
int pos{0};
for(int i{0}; i < str.length(); ++i) {
tmp += str[i];
pos = delimiter.find(str[i]);
if(pos > -1) {
vec.push_back(tmp);
tmp = "";
while(str[i+1] == ' ') ++i;
}
}
}
int main() {
std::string s{"Hi bro! How are you? This your string of file."};
std::vector<std::string> res;
split(s, res);
for(auto& el : res) std::cout << el << '\n';
return 0;
}