Методы разделения строки C++ по пробелу на вектор

Чтобы разделить строку 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;
}