无法获取string :: size_type + int来进行toupper

时间:2016-11-23 11:35:39

标签: c++ string find uppercase size-type

我想在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;

1 个答案:

答案 0 :(得分:1)

事实证明,使用toupper的唯一标准定义方式是传递unsigned charhttps://stackoverflow.com/a/37593205/2642059因此,执行此操作的最佳方法是使用string fulltext中的lambda {3}},例如,您可以将transform(cbegin(fulltext), cend(fulltext), begin(fulltext), [](const unsigned char idx){ return toupper(idx); }) 全部大写,如下所示:

'.'

由于您希望从transform上的第一个iteratorfind开始,您可以使用iterator获取'.' { {1}}并在transformauto 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); });

transform