Я хочу использовать toupper
на каждой char
после точки .
в string
,
Я попробовал этот код, но я получаю черный экран при запуске программы, если я использую +
оператор.
string fulltext = "my name is John. i have a girlfriend. her name is Anna";
string::size_type idx = 0;
while ((idx = fulltext.find(".")) != string::npos)
{
if (idx != string::npos)
{
fulltext[idx + 2] = toupper(fulltext[idx + 2]);
}
}
cout << fulltext << endl;
Вот и получается, что единственный стандартный определенный способ использования toupper
это передать unsigned char
: https://stackoverflow.com/a/37593205/2642059 Таким образом, лучший способ сделать это с лямбда в transform
, например, вы могли бы использовать для своей выгоды string fulltext
в целом так:
transform(cbegin(fulltext), cend(fulltext), begin(fulltext), [](const unsigned char idx){ return toupper(idx); })
Так как вы хотите начать с первого '.'
а также transform
работает на iterator
s вы могли бы просто использовать find
чтобы получить iterator
к '.'
и использовать его в 1улица и 3й аргументы transform
: auto it = find(begin(fulltext), end(fulltext), '.')
Но мы можем избежать временной, если мы сделаем обратную итерацию:
transform(crbegin(fulltext), make_reverse_iterator(find(cbegin(fulltext), cend(fulltext), '.')), rbegin(fulltext), [](const unsigned char idx) { return toupper(idx); });
Других решений пока нет …