一年十二月  谁主春秋
关注:基础系统工程 密码学 人工智能
C++博客
首页
新随笔
联系
聚合
管理
随笔-136 评论-223 文章-30 trackbacks-0
字符大小写转换
原为某著名软件公司试题,大意如下:
请实现以下两个函数:
char toupper(char c);
char tolower(char c);
分别用于将传入的字母转为大写和小写。
两个函数传入的参数取值范围都是[a-zA-Z],并且为ASCII编码,实现时不用检查参数合法性。
两个函数的实现不能使用任何形式的分支、跳转等类型的语句或指令(特别说明:C/C++的条件操作符?:也是分支指令的一种形式,故而不能使用)。
请尽可能多的写出你知道的办法。
分析解决:此题比较特别,限制严格,根据题目要求,排除if else、for、while、do while、switch case、?:外,能使用的语句就只有 =、+=、-=、&、|、^、++、--这些了,想要实现大小写转换,只能从这些语句中进行选择思考,由于字符集为ASCII编码,且范围明确为[a-zA-Z],我们知道,a-z对应ASCII值为97-122,A-Z对应ASCII为65-90,观察这些数字,可以发现97-122都大于96 ,65-90都大于64且小于96,进一步从二进制上考虑,则发现所有小写字母对应的二进制形式为011XXXXX,大写字母对应的二进制形式为010XXXXX,一到这里,哈哈,答案就出来了,通过位运算&和|就可实现了。代码描述如下
1
char
toupper(
char
c)
2
{
3
return
c
&
0x5F
;
4
}
5
6
char
tolower(
char
c)
7
{
8
//
c | 0x60也行,但不太好,因为0x60会改变结果的第7位值,根据题目意思,改变第6位值为1,而其它位保持不变就够了。
9
return
c
|
0x20
;
10
}
至于其它方法,我就没多想了,还希望各位大侠多多分享一下哈。
posted on 2011-06-25 12:13
春秋十二月
阅读(3128)
评论(7)
编辑
收藏
引用
所属分类:
Algorithm
评论:
#
re: 字符大小写转换 2011-06-25 12:26 |
千暮(zblc)
mark.
回复
更多评论
#
re: 字符大小写转换 2011-06-25 15:39 |
路人
看过王爽汇编的都知道
回复
更多评论
#
re: 字符大小写转换 2011-06-25 16:49 |
wangofjian
精炼,转载
回复
更多评论
#
re: 字符大小写转换 2011-06-25 18:42 |
hi
char toUppper(char a)
{
return a+'A'-'a';
}
回复
更多评论
#
re: 字符大小写转换 2011-06-25 19:11 |
空明流转
唉。这尼玛都是从来不顾及LOCALE的。。。
回复
更多评论
#
re: 字符大小写转换 2011-06-25 22:57 |
megax
@空明流转
这个很重要!
回复
更多评论
#
re: 字符大小写转换
2011-06-27 11:35 |
haohao06
return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[a - 'a'];
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
相关文章:
AES不可约多项式
总结数论中不定方程定理证明的细节验证
AES有限域与域扩张
一个整数交换群定理的证明
经典有限循环群的选取生成
总结AES加密涉及的数学定理
基于中国剩余定理优化RSA解密推论的证明
中国剩余定理特例推论的证明
DSA数字签名的推导
RSA加解密的证明
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
本博客所有随笔均为原创,因为不定期维护更新,所以转载请注明出处,如有问题和建议,请留言或评论,发表您的宝贵意见,藉此平台以分享交流、共同进步。
联系方式:微信theory-math
<
2023年9月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(32)
给我留言
查看公开留言
查看私人留言
随笔分类
(135)
Algorithm(30)
C/C++(24)
Compile Optimize(17)
Compute Theory(4)
Database(4)
Network(16)
Opensrc(13)
Program Analysis(5)
System(22)
随笔档案
(136)
2023年9月 (33)
2021年12月 (1)
2021年10月 (1)
2021年9月 (1)
2021年2月 (1)
2020年5月 (3)
2020年4月 (1)
2019年11月 (4)
2019年7月 (1)
2018年11月 (1)
2017年12月 (1)
2016年12月 (1)
2016年11月 (2)
2016年10月 (1)
2016年9月 (1)
2016年8月 (3)
2016年7月 (4)
2016年5月 (1)
2015年10月 (2)
2015年9月 (1)
2015年6月 (2)
2015年5月 (3)
2015年2月 (1)
2015年1月 (1)
2014年12月 (2)
2014年4月 (2)
2014年3月 (1)
2014年1月 (1)
2013年10月 (1)
2013年9月 (1)
2013年8月 (3)
2013年5月 (1)
2013年3月 (1)
2012年11月 (1)
2012年9月 (3)
2012年8月 (1)
2012年7月 (1)
2012年6月 (5)
2012年5月 (3)
2011年12月 (5)
2011年11月 (1)
2011年10月 (5)
2011年8月 (7)
2011年7月 (6)
2011年6月 (6)
2010年6月 (1)
2009年12月 (1)
2009年8月 (1)
2009年7月 (1)
2009年6月 (1)
2009年4月 (3)
文章分类
(30)
诗词作品集(30)
关注的开源项目
LLVM
编译系统
nginx
高性能Web服务器
OpenSSL
密码学库
suricata
网络IPS引擎
技术联盟
Linux开发专注者
内核中国
最新随笔
1. 基于矩阵法分析改进指令调度
2. kretprobe探究思考
3. AES不可约多项式
4. 关于自动机和正则的一些重要定理
5. 正则语言R和上下文无关语言CFL的判定性质总结
6. 为什么素检测存在概率多项式时间算法
7. 命题与谓词逻辑可判定性
8. 关于程序编译中的图论问题思考
9. 函数式语言编译优化
10. 总结数论中不定方程定理证明的细节验证
积分与排名
积分 - 366871
排名 - 64
最新评论
1. re: 一种拦截Linux原始套接字IO的方法[未登录]
很有前途和很有钱途啊。
--chipset
2. re: 一种拦截Linux原始套接字IO的方法[未登录]
@chipset
是的
--春秋十二月
3. re: 一种拦截Linux原始套接字IO的方法[未登录]
工作是做网络安全?
--chipset
4. re: 一种使用函数指针实现状态机的方法
函数指针实现状态机
--linda
5. re: 多标签视图类CTabView的设计实现
为啥代码缺少一些呢,给新手个完整点的啊
--pekingliu
6. re: 工作线程与消息循环
从消息队列取出消息 mark了
--mmocake
7. re: 一种简单的跨平台套接字管道
评论内容较长,点击标题查看
--IT搬运工
8. re: 一种简单的跨平台套接字管道
windows仅支持af_init和af_init6地址族有错别字么?
af_init和af_init6
--IT搬运工
9. re: Shell应用(8):使用awk定位反汇编输出[未登录]
厉害
--Chipset
10. re: TCP分组丢失时的状态变迁
不错
--Binky
阅读排行榜
1. 基于OpenSSL实现的安全连接(13345)
2. 字符串16进制显示(12698)
3. 基于boost asio实现的ssl socket框架(12014)
4. Linux套接字与虚拟文件系统(1):初始化和创建(8365)
5. 关于数据库的一些学习研究心得(7988)
评论排行榜
1. basic_string内存泄露问题之分析解决(19)
2. 求单向链表倒序第m个元素(11)
3. 基于顺序存储实现的多叉树(1):深度优先存储(9)
4. 字符大小写转换(7)
5. 字符串16进制显示(6)
60天内阅读排行
1. 总结数论中不定方程定理证明的细节验证(337)
2. 总结AES加密涉及的数学定理(333)
3. 关于自动机和正则的一些重要定理(316)
4. 为什么素检测存在概率多项式时间算法(311)
5. 关于格的基本定理简要总结(161)