Вы были очень близки в своем мышлении. Единственное, чего вам не хватало, - это цикла для реализации вставки для каждого '.'
, найденного в вашей строке. Цикл for
идеально подходит для этого, например,
void myfunc (std::string& s)
{
/* loop finding each '.' insert ' ' after (except at end) */
for (size_t pos = s.find('.');
pos != std::string::npos;
pos = s.find('.', pos + 1)) {
if (pos + 1 != s.length()) /* don't insert ' ' at end of s */
s.insert (pos + 1, " ");
}
}
( примечание: нет необходимости вставлять ' '
в самый конец строки, поэтому проверьтеif (pos + 1 != s.length())
используется для проверки того, что вы не в конце, прежде чем вставка будет выполнена)
В целом, в полном примере вы можете сделать:
#include <iostream>
#include <string>
void myfunc (std::string& s)
{
/* loop finding each '.' insert ' ' after (except at end) */
for (size_t pos = s.find('.');
pos != std::string::npos;
pos = s.find('.', pos + 1)) {
if (pos + 1 != s.length()) /* don't insert ' ' at end of s */
s.insert (pos + 1, " ");
}
}
int main (void) {
std::string s {"look.run.see."};
std::cout << "original: " << s << '\n';
myfunc (s);
std::cout << "modified: " << s << '\n';
}
Пример использования /Выходные данные
$ ./bin/stringinsert
original: look.run.see.
modified: look. run. see.
Это не единственный способ сделать это, но очень простой.