Первое, что вам нужно сделать, это найти n-е слово.
Первое, что приходит на ум, это использование std::istringstream
, чтобы отделить строку с помощью >>
и std::ostringstream
, чтобы написать новую строку.
std::istringstream in(StringCopy1);
std::string token;
std::ostringstream out;
int count = 0;
while (in >> token) // while we can get more tokens
{
if (++count != number) // not the number of the token to replace
{
out << token << " "; // write the token
}
else
{
out << word << " "; // write the replacement word
}
}
return out.str();
Хотя это легко написать, у него есть две проблемы: он теряет правильный тип пробела в string
И помещает дополнительный пробел в конце строки.Это также довольно медленно и использует намного больше памяти, чем если вы измените строку на месте.
Используйте std::string::find_first_not_of
, чтобы найти первый непробельный символ.Это будет начало первого слова.Затем используйте std::string::find_first_of
, чтобы найти следующий пробельный символ.Это будет конец слова.Чередуйте взад и вперед, находя не пробелы, затем пробелы, пока не найдете начало и конец n-го слова.std::string::replace
это слово.Этот подход требует от вас написания все более сложного кода, но гораздо более удовлетворительным.Вот почему я обрисовал его, а не реализовал полностью: чтобы вы были довольны собой.
Примечание: void stringFunctionValue(string StringCopy1, int Number, string Word)
не дает возможности вернуть результат пользователю.Это делает для бесполезной функции.Попробуйте вернуть string
вместо void
.