实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。
示例 1:
输入: "Hello"
输出: "hello"
示例 2:
输入: "here"
输出: "here"
示例 3:
输入: "LOVELY"
输出: "lovely"
思路1
利用ASCII值大小写之间相差32的性质,遇到大写的字母,加上32就是相应的小写字母。
string toLowerCase(string str) {
int len = str.size();
for(int i = 0; i < len; ++ i){
if(str[i] <= 'Z' && str[i] >= 'A'){
str[i] = str[i] + 32;
}
}
return str;
}
思路2
使用哈希映射,打表,将大写的字母作为key, 小写字母作为value,遇到key,用相应key的value赋值。
思路3
位运算
大写变小写、小写变大写 : 字符 ^= 32;
大写变小写、小写变小写 : 字符 |= 32;
小写变大写、大写变大写 : 字符 &= -33;
#include<iostream>
using namespace std;
int main(){
string s;
cin>>s;
int i =0;
while (s[i])
{
s[i++]|=32;
}
cout<<s<<endl;
}
思路4
使用内置函数tolower(),但是既然在训练算法,那就建议不要使用内置函数
在C++语言中 tolower()函数是把字符串都转化为小写字母
touppre()函数是把字符串都转化为大写字母
其中需要注意的是:这两个函数的声明在头文件<cctype>中
但是经过测试,如果不包含头文件<cctype>仅仅有<iostream>也是可以的
#include<iostream>
using namespace std;
int main(){
string a;
//用string库,调用getline, 直接读入一整行
getline(cin,a);
//转换大小写,可以都转换为大写,或者小写
for (int i=0;i<a.length();++i){
a[i]=tolower(a[i]);
}
}