我想在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;
答案 0 :(得分:1)
事实证明,使用toupper
的唯一标准定义方式是传递unsigned char
:https://stackoverflow.com/a/37593205/2642059因此,执行此操作的最佳方法是使用string fulltext
中的lambda {3}},例如,您可以将transform(cbegin(fulltext), cend(fulltext), begin(fulltext), [](const unsigned char idx){ return toupper(idx); })
全部大写,如下所示:
'.'
由于您希望从transform
上的第一个iterator
和find
开始,您可以使用iterator
获取'.'
{ {1}}并在transform
:auto it = find(begin(fulltext), end(fulltext), '.')
的1 st 和3 rd 参数中使用它但是如果我们这样做,我们可以避免临时反向迭代:
transform(crbegin(fulltext), make_reverse_iterator(find(cbegin(fulltext), cend(fulltext), '.')), rbegin(fulltext), [](const unsigned char idx) { return toupper(idx); });