免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: kewenliang

一道百度笔试题 [复制链接]

论坛徽章:
0
发表于 2008-09-18 20:38 |显示全部楼层
char *tolower(char *p) {
    char *src = p;
    int diff = 'a' - 'A';
   
    for (; src != NULL && *src; ++src) {
        if (*src&0x80) {
            if ((++src == NULL) || !*src)
                break;
        } else if (*src >= 'A' && *src <= 'Z') {
            *src += diff;
        }                        
    }  
    return p;  
}

论坛徽章:
0
发表于 2008-09-19 08:37 |显示全部楼层
这个也考?
百度一下不就可以了?

论坛徽章:
0
发表于 2008-09-19 08:44 |显示全部楼层
原帖由 kewenliang 于 2008-9-18 17:08 发表
昨晚参加百度的笔试,今天下午去面试时被鄙视了,提出了问题基本都不会,人家直接说:不好意思。。。。。。。。。


精灵王都不会?

论坛徽章:
0
发表于 2008-09-19 11:18 |显示全部楼层
虽然题目挺简单,不过楼上所有回帖全都不对。。。
正解显然是打表

论坛徽章:
0
发表于 2008-09-19 11:46 |显示全部楼层
有必要把面试题搞上来讨论么?

论坛徽章:
0
发表于 2008-09-19 14:14 |显示全部楼层
汉字的两个字节的高位都是1啊,ASCII值都是负数,知道这个了,就好办了啊。

论坛徽章:
0
发表于 2008-09-19 15:01 |显示全部楼层

试着写了一个,不知道对不对

char tmp[128];
        strcpy(tmp, "helloWorld你好you");
        cout << tmp << endl;
       
        int c;
        int pos = 0;
        int len = strlen(tmp);
        cout << "length: " << len << endl;
       
        do
        {
                c = (int)tmp[pos];
                if (c>127)
                {
                        pos++;
                }
                else
                {
                        tmp[pos] = isupper(tmp[pos]) ? tmp[pos] : toupper(tmp[pos]);
                }       
                pos++;
        }while(pos < len);
        cout << tmp << endl;

论坛徽章:
0
发表于 2008-09-19 16:03 |显示全部楼层
拿php实现一下,原理差不多:

  1. <?php
  2. function tolower(&$s){
  3.         $len = strlen($s);
  4.         for($i=0; $i<$len; $i++){
  5.                 $t = ord($s[$i]);
  6.                 if ($t>128 && $t<255){$i++;continue;}
  7.                 if($t>=65 && $t<=90)$s[$i] = strtolower($s[$i]);
  8.         }
  9.         return $s;
  10. }
  11. //Test code
  12. $s = "这是一段TEST TEXT,里面夹杂了English和Chinese,还有一些数字,比如123456";
  13. echo tolower($s);
  14. //output: 这是一段test text,里面夹杂了english和chinese,还有一些数字,比如123456[~]$
  15. ?>
复制代码

论坛徽章:
0
发表于 2008-09-19 19:09 |显示全部楼层
原帖由 emacsnw 于 2008-9-16 15:42 发表
直接用tolower或者isupper之后+32不行吗?

支持

论坛徽章:
0
发表于 2008-09-19 20:03 |显示全部楼层
不是baidu的面试题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP