一个字符串吧大写字母转换为小写字母

709. 转换成小写字母

难度简单140收藏分享切换为英文接收动态反馈

实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。

示例 1:

输入: "Hello"
输出: "hello"

示例 2:

输入: "here"
输出: "here"

示例 3:

输入: "LOVELY"
输出: "lovely"

通过次数59,537提交次数78,268

这道题目其实一点也不难,方法有很多,我选择了使用API,tansform():

string rets=str;

 transform(rets.begin(),rets.end(),rets.begin(),tolower); 

然后报错了。。。no matching function for call to ‘transform’ 。。。

根据经验,函数确实存在,应该是参数类型没有匹配上。

感谢https://blog.csdn.net/u011089523/article/details/48499023?ops_request_misc=&request_id=&biz_id=102&utm_term=mo%2520match%2520function%2520for%2520call%2520to%2520&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-48499023.pc_search_result_no_baidu_js

提供了三种解决方法:

1.因为在全局命名空间中有实现的函数(而不是宏),所以我们明确命名空间,这并不是总奏效,但是在我的g++环境中没有问题:

transform(str.begin(), str.end(), str.begin(), ::toupper);
  •  

2.自己写一个函数出来—wraper

inline char charToUpper(char c)
{
    return std::toupper(c);
}

3.强制转化:将toupper转换为一个返回值为int,参数只有一个int的函数指针。

transform(str.begin(), str.end(), str.begin(), (int (*)(int))toupper);

这里采用了第三种:正确可以通过刷题的:

class Solution {
public:
    string toLowerCase(string str) {
        string rets=str;
        transform(rets.begin(),rets.end(),rets.begin(),(int (*)(int))tolower); 
        return rets;
    }
};

第一种也是可以的,亲测:transform(rets.begin(),rets.end(),rets.begin(),::tolower);  

猜你喜欢

转载自blog.csdn.net/weixin_41579872/article/details/112595494