无法获得字符串:: size_type int做touper

Cant get string::size_type + int to do toupper

本文关键字:type int touper size 字符串      更新时间:2023-10-16

我想在 string中的 .之后在每个 char上使用 toupper。我尝试了此代码,但是如果我使用+操作员,我在启动程序时会获得黑屏。

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中使用的lambda,例如,您可以将string fulltext大写。

transform(cbegin(fulltext), cend(fulltext), begin(fulltext), [](const unsigned char idx){ return toupper(idx); })

由于您想从第一个'.'启动,并且transformiterator s上工作,因此您只需使用find即可获得iterator'.',然后在1 st 和3 rd中使用它 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); });

实时示例