【问题标题】:Inserting a character in a string在字符串中插入一个字符
【发布时间】:2019-10-08 11:02:44
【问题描述】:

我有一个字符串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 等效输出。 我该如何解决这个问题?

【问题讨论】:

  • 您可以从stackoverflow.com/questions/313970/…查看如何制作小写
  • 不需要擦除/插入,直接设置值即可:name2[i] = tolower(name[i])。我想您正在遍历字符串,是 (for(size_t i = 0; i < name2.length; ++i)) 吗?那么你就不需要范围检查访问(at(i)),你知道你在范围内,所以更喜欢更有效的非检查索引运算符(name2[i])。

标签: c++ string c++14


【解决方案1】:

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

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

直接tolower()ith 位置的字符会更简单、更高效:

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

话虽如此,更简单的方法是一次性将整个字符串小写,并且理所当然地认为某些字符会不必要地小写:

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

另请参阅:std::tolower

【讨论】:

  • 这是我的代码 for(int i=0;i
  • 你确定len 是正确的吗?如果您将其替换为 name.size() 会怎样?
  • 还是一样,len基本上就是name2.length()
  • 不看所有代码很难说问题出在哪里。
  • Nice 也是一个基于范围的 for 循环:for(auto& c : name) { c = tolower(static_cast<unsigned char>(c)); }
【解决方案2】:

这可以简单地使用基于范围的 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'的提升代码作为整数转换为字符串。

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多