我有一个字符串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等价的输出。 我该如何解决?
答案 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_string
将tolower
的结果解释为整数。因此,您在字符串中看到的是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。