I will give you an exact answer to your question with an example and an alternative solution with an one-liner.
Please see
#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
#include <regex>
const std::regex re(";");
int main() {
    std::string test("25;16;67;13;14;15");
    // Solution 1: as requested
    {
        size_t current_pos{};
        size_t prev_pos{};
        // Search for the next semicolon
        while ((current_pos = test.find(';', prev_pos)) != std::string::npos) {
            // Print the resulting value
            std::cout << test.substr(prev_pos, current_pos - prev_pos) << "\n";
            // Update search positions
            prev_pos = current_pos + 1;
        }
        // Since there is no ; at the end, we print the last number manually
        std::cout << test.substr(prev_pos) << "\n\n";
    }
    // Solution 2. All in one statement. Just to show to you what can be done with C++
    {
        std::copy(std::sregex_token_iterator(test.begin(), test.end(), re, -1), {}, std::ostream_iterator<std::string>(std::cout, "\n"));
    }
    return 0;
}