注册 登录
编程论坛 VC++/MFC

求助transform的用法

dorble 发布于 2013-11-07 02:04, 868 次点击
看见教程上使用transform转换大小写是这样的transform(str1.begin(),str1.end(),str1.begin(),toupper);
我自己编译的时候提示出错,然后把toupper改成towupper通过
我上网搜索都是toupper没有towupper的,请高手指教下怎么回事
环境
系统是64位win7(是不是因为64位系统所以要用towupper,我猜应该是类似宽字符的意思吧);
codeblocks12.11默认编译器
下面是完整代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(void)
{
 string str1;
str1="iloveyou";
transform(str1.begin(),str1.end(),str1.begin(),towupper);//用toupper不能编译
 cout<<str1<<endl;
 transform(str1.begin(),str1.end(),str1.begin(),towlower);//用tolower不能编译
 cout<<str1<<endl;

  return 0;
}
5 回复
#2
peach54602013-11-07 09:21
http://en.

我上网搜索都是toupper没有towupper的,请高手指教下怎么回事
真不知道你这句话是怎么说出来的...
#3
dorble2013-11-07 14:33
不是我说出来的,是因为我用toupper编译通不过,然后我重新在codeblocks里面建了工程用到了代码自动完成的功能,然后我修改这个参数时
我发现自动提示除了toupper外,另外还有个towupper参数,我抱着试试的态度,改了以后果然成功通过编译,不信你可以自己试下,要在带代码自动完成的环境下
也许你的机器还是只能用toupper,但是你可以看下是不是确定存在towupper,而且我这里确实也只有用带w的才能编译成功,
我也是来问为什么是这样的看附件图
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录


PS刚才看了版主你回复中的网页链接,原来后面toupper这个参数就是std::toupper这个函数啊,
那是不是我的猜想是正确的,应该是系统是32位还是64位有关系

[ 本帖最后由 dorble 于 2013-11-7 14:55 编辑 ]
#4
dorble2013-11-07 15:16
还有版主啊,

我上网搜索都是toupper没有towupper的,请高手指教下怎么回事
真不知道你这句话是怎么说出来的...

我说的意思是transform后面那个参数,我只看见有用toupper的,
没搜到类似transform(str1.begin(),str1.end(),str1.begin(),towupper);这样的用法和解释
不是说没有towupper这个函数本身
#5
peach54602013-11-07 15:25
以下是引用dorble在2013-11-7 15:16:17的发言:

还有版主啊,

我上网搜索都是toupper没有towupper的,请高手指教下怎么回事
真不知道你这句话是怎么说出来的...

我说的意思是transform后面那个参数,我只看见有用toupper的,
没搜到类似transform(str1.begin(),str1.end(),str1.begin(),towupper);这样的用法和解释
不是说没有towupper这个函数本身

只是一个wchar版嘛...
我早上心情不好,说话过激了...

至于是不是因为64位,我不清楚咧...应该不是...
可能是因为你工程是unicode的...
#6
dorble2013-11-07 19:11
问题找到了,和unicode无关,和系统也无关 问题在于命名空间
这个帖子结贴吧
1