百度空间 | 百度首页 
 
查看文章
 
一个小题
2009-11-08 20:59
前些天写程序时想到的,叙述如下:
现有纯字母组成的单词A和单词B,设计一个函数,验证这两个单词是否是同一单词(不区分大小写)。
试求较的解法。

示例:
Check("winDow", "Window") == TRUE;
Check("PspCreateProcess", "PsCreateProcess") == FALSE;
Check("FireFox", "FireFox") == TRUE;

我的方法在下面,其实中间的思想大家基本上都想到了。
bool Equal(const char* A, const char* B)
{
for(; *A != '\0' && *B != '\0' && ((*A - *B) & 0x1F) == 0; A++, B++);
return *A == '\0' && *B == '\0';
}

类别:默认分类 | 添加到搜藏 | 浏览() | 评论 (14)
 
最近读者:
 
网友评论:
1
2009-11-08 21:21 | 回复
a[i] xor b[i]
 
2
2009-11-08 21:23 | 回复
TO1: Check(winDow && Window)
 
3
2009-11-08 21:36 | 回复
如果是一样的话就是0或者32
 
4
2009-11-08 21:37 | 回复
不过我菜鸟,不知道不一样会怎么样
 
5
2009-11-08 22:07 | 回复
我的解法将在不久后于0GiNr论坛揭晓,同时希望大家提出更好的解法。
 
6
2009-11-08 22:24 | 回复
memcmp~
 
7
2009-11-08 22:25 | 回复
全toupr,然后做memcmp~
 
8
2009-11-08 22:25 | 回复
或者使用不区分大小的高速HASH算法最后用==验证~
 
9
2009-11-08 22:26 | 回复
如果长度相等可以做疑惑
 
10
2009-11-08 22:29 | 回复
TO V大:
要是使用toupper就太慢了……
 
11
2009-11-09 12:13 | 回复
while(A[i] && B[i])
{
    if (A[i] ^ B[i] != 0 && A[i] ^ B[i] != 32 ) return false;
    i ++;
}

if ( A[i] || B[i] ) return false;

return true;
 
12
2009-11-09 14:24 | 回复
纯字母可以 (a[i] & 0x1f) == (b[i] & 0x1f), 三个逻辑运算.
而使用异或需要四个逻辑运算以及一个算术运算 (!= 32)
 
13
2009-11-09 19:29 | 回复
v大太幽默了
 
15
2009-11-09 21:44 | 回复
我直接把我的方法写下来吧,其实大家基本上都想到了。
bool Equal(const char* A, const char* B)
{
    for(; *A != '\0' && *B != '\0' && ((*A - *B) & 0x1F) == 0; A++, B++);
    return *A == '\0' && *B == '\0';
}
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu