在字符串中插入字符

时间:2019-10-08 11:02:44

标签: c++ string c++14

我有一个字符串name2。我想删除其中的大写字母,而改用小写字母。

输入:Car输出:car

这是我的循环代码:-

 if(isupper(name2.at(i))) {
           string tem=to_string(tolower(name2.at(i)));
            name2.erase(i,1);
            name2.insert(i,tem);
        }

i只是循环变量。

但是,这是我的输入与输出

输入:Sushant输出:115ushant

我想它正在提供某种与ASCII等价的输出。 我该如何解决?

2 个答案:

答案 0 :(得分:0)

只需使用基于范围的for循环即可完成

这是一个演示程序。

#include <iostream>
#include <string>
#include <cstring>

int main()
{
    std::string s;

    std::cout << "Enter a word: ";
    std::cin >> s;

    for ( char &c : s )
    {
        if ( std::isupper( ( unsigned char )c ) )
        {
            c = tolower( c );
        }
    }

    std::cout << s << '\n';
}

其输出可能看起来像

Enter a word: Sushant
sushant

至于您的if语句,则至少要包含此子语句

string tem=to_string(tolower(name2.at(i)));

没有道理。例如

std::cout << std::to_string( 'A' ) << '\n';

可以输出

65

对应于字符“ A”的ASCII值。

该函数std::to_string将字符'A'的提升代码作为整数转换为字符串。

答案 1 :(得分:0)

在这里,to_stringtolower的结果解释为整数。因此,您在字符串中看到的是ASCII值's'(115)。要解决此问题,无需转换为字符串,只需直接使用字符即可:

char c = tolower(name.at(i));
name2.erase(i, 1);
name2.insert(i, c);

更简单,更有效的方法就是直接tolower()i个位置的字符:

name[i] = std::tolower(name[i]);

话虽这么说,更简单的方法是一次性将整个字符串小写,并认为某些字符不必要地被小写:

std::transform(name.begin(), name.end(), name.begin(), 
                [](unsigned char c){ return std::tolower(c); }
              );

另请参阅:std::tolower

相关问题