在codeforces里做题的时候,碰到了一道题,链接在这里。我在网上看到别人代码的时候看到了别人写的一个函数,这是我没用过的,所以记录下来。函数名为tolower(),函数名顾名思义,将字符转换为小写,其实它的效果也可以根据ASCII码大小写之间的差进行转换的效果是一样的。不知道是否存在一个toupper(),将字符转换为大写,一会可以试一试。先把tolower记录下来再说。
tolower
template<Class CharType> CharType tolower( CharType _Ch, const locale& _Loc )参数 返回值
字符转换为小写
也不怎么需要特定的头文件
找一段代码试一试函数的效果,代码如下:
#include <iostream>
#include <string>
//#include <cctype>
using namespace std;
int main()
{
string str = "THIS IS A STRING";
for (int i = 0; i <str.size(); i++)
str[i] = tolower(str[i]);
cout << str << endl;
return 0;
}
输出为 this is a string,下面我用ASCII码也可以实现相同的功能,代码如下啊:
#include <iostream>
#include <string>
//#include <cctype>
using namespace std;
int main()
{
string str = "THIS IS A STRING";
for (int i = 0; i <str.size(); i++)
if(isalpha(str[i]))
str[i] = str[i]+32;
cout << str << endl;
return 0;
}
这两段代码效果是相同的。下面我来试一试有没有一个函数叫做toupper(),呵呵,别说还真存在啊,代码如下:
#include <iostream>
#include <string>
//#include <cctype>
using namespace std;
int main()
{
string str = "this is a string";
for (int i = 0; i <str.size(); i++)
//if(isalpha(str[i]))
str[i] = toupper(str[i]);
cout << str << endl;
return 0;
}
当然我也可以根据ASCII码来做相应的转换
#include <iostream>
#include <string>
//#include <cctype>
using namespace std;
int main()
{
string str = "this is a string";
for (int i = 0; i <str.size(); i++)
if(isalpha(str[i]))
str[i] = str[i]-32;
cout << str << endl;
return 0;
}
好了,综上记住两个字符串大小写转换的函数tolower和toupper,也不怎么需要什么特殊的头文件直接就可以用,比根据用ASCII码转换要方便一些,因为用ASCII码进行大小写转换可能涉及到字符串中有空格的问题,在空格的情况下使用ASCII码进行相同的处理结果会使得原本空格的地方出现@或者其他就丢失了仅仅大小写转换的效果。