将string字符串中的字符转为全部大写或者全部小写
2014-10-20 11:25
288 查看
使用<algorithm.h>中的transform算法。
但是直接编译上述的代码,编译器会报错。报错信息为:
只要把代码中的std::toupper改为::toupper就好了,原因在于我们在这里要使用在全局定义的toupper。而不是在命名空间std下定义的toupper。本人的观点是toupper是一个函数,现在编译器搞不清到底要调用哪个命名空间下的toupper函数了。这也是为什么错误信息会提示“unresolved
overloaded function type”的原因。
为了帮助编译器解析正确的重载函数,可以对std::toupper做强制类型转换。
#include <iostream> #include <algorithm> int main() { std::string s="hello"; std::string out; std::transform(s.begin(), s.end(), std::back_inserter(out), std::toupper); std::cout << "hello in upper case: " << out << std::endl; }
但是直接编译上述的代码,编译器会报错。报错信息为:
no matching function for call to ‘transform( __gnu_cxx::__normal_iterator<char*, std::basic_string <char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string <char, std::char_traits<char>, std::allocator<char> > >, std::back_insert_iterator<std::basic_string <char, std::char_traits<char>, std::allocator<char> > >, <unresolved overloaded function type>)’
只要把代码中的std::toupper改为::toupper就好了,原因在于我们在这里要使用在全局定义的toupper。而不是在命名空间std下定义的toupper。本人的观点是toupper是一个函数,现在编译器搞不清到底要调用哪个命名空间下的toupper函数了。这也是为什么错误信息会提示“unresolved
overloaded function type”的原因。
为了帮助编译器解析正确的重载函数,可以对std::toupper做强制类型转换。
(int (*)(int))std::toupper
也就是如下代码:[code]std::transform(s.begin(), s.end(), std::back_inserter(out),(int (*)(int))std::toupper)
在这里我的理解是命名空间下定义的toupper是一个模板类型的函数。而全局空间的toupper是一个形参为int,返回值也为int的函数。在这里强制转换std::toupper也可以帮助编译器找到正确的重载函数。
注意:
1. 要把string里面的字符全部转换为小写,只需要使用tolower就行了。
2. string里面即便有中文字符,也不影响字符转换。比如把“中国,Hi” 转换为“中国,HI”或者“中国,hi”。
相关文章推荐
- 计算 24 点是一种扑克牌益智游戏,随机抽出 4 张扑克牌,通过加 (+) ,减 (-) ,乘 ( * ), 除 (/) 四种运算法则计算得到整数 24 ,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写 joker 表示小王,大写 JOKER 表示大王:
- 将字符串中的小写字符全部转换为大写
- 第4章, 5.9.1输入一个字符串,把其中的大写转为小写,其他字符不变
- 汇编程序:将字符串中所有大写字符转为小写
- php将字符串全部转换成大写或者小写的方法
- 用80x86汇编语言编程:输入字符串,并把大写字符转为小写再输出
- 请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。 给定一个string
- 可以一直接收键盘字符,并将大写转为小写,小写转为大写,数字不作处理
- C# 字符、字符串过滤,只能输入数字、中文、英文、大写、小写
- 输入一个字符串,如果第二个字符是字母(a~z ,A~Z),则将其大写变小写,小写变大写,如果不是字母则将其修改为空格,并将修改后的字符串输出。
- (5)实现一个函数,把一个字符串中的字符从小写转为大写。
- 实现一个函数,把一个字符串中的字符从小写转为大写。
- 将一个字符串转换成首字符大写,其他小写
- C#中进行字符串类型声明时,一个小写 "string ", 一个大写 "String ", 这两个类有什么区别呢?
- 字符串逆序,字符串转为字符数组 、字符串转字节数组,字节数组转字符串、java中String、StringBuffer、StringBuilder
- string 将指定的字符或字符串全部替换成特定的字符或字符串
- c语言从键盘中输入一串字符串,将字符中的大写转化成小写字母,将小写字母转换成大写字母,以*号键结束
- 设计一个函数实现将一个字符串中的大写字符变为小写字符,小写字符变为大写字符,数字不变,删除其他字符
- C# 字符、字符串过滤,只能输入数字、中文、英文、大写、小写(转)
- 将字符串转化为大写或者是小写 北航的题目