字符易位破译(就是字母排序问题)

gig886 2010-09-15 12:42:25
编写一个函数,检查两个单词是否是字母易位词。两个单词如果包含相同的字母,次序不同,则称为字母易位词。例如:“silent”和“listen”是字母易位词。
提示:先对单词进行排序,再进行比较
如果用数组来保存输入的单词的话我不知道怎样判断单词的字母数(C++刚学)。最难下手的是字母排序问题。
...全文
738 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaolinger2 2010-09-15
  • 打赏
  • 举报
回复
不是提示你先排序吗?那就先排序呗。
分别快排一遍以后再从头到尾依次遍历,只要出现不一样的就判断为不是。
dooX8086 2010-09-15
  • 打赏
  • 举报
回复
@we_sky2008
@ri_aje
一式3份〜呵呵〜〜顶
Rainqin123 2010-09-15
  • 打赏
  • 举报
回复
上面这位代码优秀,建议打满分
we_sky2008 2010-09-15
  • 打赏
  • 举报
回复
先排序、再判断:

bool func(char word1[], char word2[])
{
char tmp, *p, *p1 = word1, *p2 = word2;

if (strlen(word1) != strlen(word2))
return false;

while (tmp = *word1)
{
p = word1;
while (p > p1)
{
if (*p < *(p - 1))
*p = *(p - 1);
else
break;
--p;
}
*p = tmp;

++word1;
}
while (tmp = *word2)
{
p = word2;
while (p > p2)
{
if (*p < *(p - 1))
*p = *(p - 1);
else
break;
--p;
}
*p = tmp;

++word2;
}

while (*p1)
{
if (*p1 != *p2)
return false;
++p1;
++p2;
}
return true;
}
we_sky2008 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qinqijing_123 的回复:]
能否解释下 alpha1[(*word1 | 0x20) - 'a']++;
是什么意思?为啥这么做?
[/Quote]
就是使不区分大小写,使“Silent”和“Listen”也是字母易位词。
Rainqin123 2010-09-15
  • 打赏
  • 举报
回复
能否解释下 alpha1[(*word1 | 0x20) - 'a']++;
是什么意思?为啥这么做?
ri_aje 2010-09-15
  • 打赏
  • 举报
回复

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

bool is_anagram (std::string x, std::string y)
{
std::sort(x.begin(), x.end());
std::sort(y.begin(), y.end());
return x == y;
}

int main (int, char**)
{
cout << is_anagram("silent", "listen") << endl; // 1
cout << is_anagram("silent", "lesson") << endl; // 0
return 0;
}
we_sky2008 2010-09-15
  • 打赏
  • 举报
回复
给楼主一个不需要排序的方法:

bool func(const char *word1, const char *word2)
{
char alpha1[26] = {0};
char alpha2[26] = {0};
int i = 0;

while (*word1)
{
alpha1[(*word1 | 0x20) - 'a']++;
word1++;
}
while (*word2)
{
alpha2[(*word2 | 0x20) - 'a']++;
word2++;
}
for (; i < 26; i++)
{
if (alpha1[i] != alpha2[i])
return false;
}
return true;
}

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧