Чтобы разделить строку C++ по пробелам и сохранить полученные подстроки в векторе, вы можете использовать несколько методов. Вот несколько подходов:
Метод 1: использование строкового потока
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
int main() {
std::string str = "C++ split string by space into vector";
std::istringstream iss(str);
std::vector<std::string> tokens{std::istream_iterator<std::string>{iss},
std::istream_iterator<std::string>{}};
// Printing the tokens
for (const auto& token : tokens) {
std::cout << token << std::endl;
}
return 0;
}
Метод 2: использование strtok
#include <iostream>
#include <vector>
#include <cstring>
int main() {
std::string str = "C++ split string by space into vector";
char* cstr = new char[str.length() + 1];
std::strcpy(cstr, str.c_str());
char* token = std::strtok(cstr, " ");
std::vector<std::string> tokens;
while (token != nullptr) {
tokens.push_back(token);
token = std::strtok(nullptr, " ");
}
// Printing the tokens
for (const auto& t : tokens) {
std::cout << t << std::endl;
}
delete[] cstr;
return 0;
}
Метод 3: использование string.find и string.substr
#include <iostream>
#include <vector>
#include <string>
int main() {
std::string str = "C++ split string by space into vector";
std::vector<std::string> tokens;
size_t startPos = 0;
size_t endPos = str.find(' ');
while (endPos != std::string::npos) {
tokens.push_back(str.substr(startPos, endPos - startPos));
startPos = endPos + 1;
endPos = str.find(' ', startPos);
}
tokens.push_back(str.substr(startPos, endPos));
// Printing the tokens
for (const auto& token : tokens) {
std::cout << token << std::endl;
}
return 0;
}