This solution assumes you want only words from the string to enter your array and that you want to split on some predetermined string delimiter like <space>" " or <double-dash>"--".
If you need to keep the void function signature, here is one:
void split_rec(string str_array[], size_t arr_index,
               string s, string delimiter) {
    if (s == "") {
        return;
    }
    size_t str_index = s.find(delimiter);
    string word = s.substr(0, str_index);
    if (word != "") {
        str_array[arr_index++] = word;
    }
    // find type functions return string::npos if they don't find.
    str_index = s.find_first_not_of(delimiter, str_index);
    if (str_index == string::npos) {
        return;
    }
    return split_rec(str_array, arr_index, s.substr(str_index), delimiter);
}
But I would recommend returning the size of the array so you communicate what the function is doing more accurately. Like this:
size_t split_rec(string str_array[], size_t arr_index,
                 string s, string delimiter) {
    if (s == "") {
        return arr_index;
    }
    size_t str_index = s.find(delimiter);
    string word = s.substr(0, str_index);
    if (word != "") {
        str_array[arr_index++] = word;
    }
    str_index = s.find_first_not_of(delimiter, str_index);
    if (str_index == string::npos) {
        return arr_index;
    }
    return split_rec(str_array, arr_index, s.substr(str_index), delimiter);
}
Then the call is like this:
string strings[10];
// I left some extra spaces in this string.
string str = " computer  laptop screen desktop mouse  ";
size_t strings_len = split_rec(strings, 0, str, " ");
cout << "Array is length " << strings_len << endl;
for (size_t i = 0; i < strings_len; i++) {
    cout << strings[i] << endl;
}
Array is length 5
computer
laptop
screen
desktop
mouse