注册 登录
编程论坛 C++教室

用Cout输出字符时为什么把ASC码输出来了。。。

冒着傻气 发布于 2010-03-28 19:58, 3668 次点击
#include <iostream>
using namespace std;
main()
{
    char a;
    cin>>a;
    a=a+32;
    cout<<a<<endl;
    return 0;
}
(这是个大小写转换的程序,这个问题很菜。。。大家不要笑话我啊
12 回复
#2
one_june2010-03-28 20:57
没有错误啊???
#3
guocaiai2010-03-28 21:45
主要是有这么一个问题,你是要进行大小写的转换,你的代码中有一句是a+=32,这就限定了你的输入必须是从‘A’~‘Z’之间的,在ASCII码中超过了这个范围就不能进行大小写字母的转换了 代码加一句就行了:
#include <iostream>
using namespace std;
main()
{
    char a;
    cin>>a;
    if(a<'A'||a>'Z')
    cout<<"error\n";
    else{
       a=a+32;
       cout<<a<<endl;}
         
    return 0;
}
#4
lmq432010-03-28 22:12
同意上一位的讲法
#5
hahayezhe2010-03-29 08:27
不要这么麻烦 不管大写小写 a=a^1<<5;输出就可以了!
#6
one_june2010-03-29 10:51
回复 5楼 hahayezhe
5楼的答案太经典了...
膜拜一下...
#7
chenyan32010-03-29 11:49
回复 5楼 hahayezhe
对不起 可以解释下吗? 我是新手没看懂。。。
#8
wei00002010-03-29 16:29
请问5楼是什么意思啊
#9
hahayezhe2010-03-29 17:08
a=a^1<<5;  
这个算法优先级为<<
以8位为例子
1的二进制为 0000 0001
<<5 左移5位  那么为 0010 0000

我们知道大小写之间的 转换值是 32 对应的二进制为
0010 0000
这时 进行异或运算 0^1=1 1^1=0 看大写换小写了 小写换大写了

同理 可以用 按位或 |   0|1=1  1|1=1  看大写变小写  小写没变
                    
#10
wei00002010-03-29 17:10
搞懂了,确实经典啊,“<<”优先级比“^”高啊
#11
drhp1232010-03-30 22:44
佩服,五楼很棒
#12
csdsq2010-04-26 21:52
同样进来膜拜一下~~~

#13
ciweitou1632010-04-28 11:10
学习了!
1