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

gig886 2010-09-15 12:42:25
编写一个函数,检查两个单词是否是字母易位词。两个单词如果包含相同的字母,次序不同,则称为字母易位词。例如:“silent”和“listen”是字母易位词。
提示:先对单词进行排序,再进行比较
如果用数组来保存输入的单词的话我不知道怎样判断单词的字母数(C++刚学)。最难下手的是字母排序问题。
...全文
821 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;
}
内容概要:本文介绍了基于Matlab代码实现的电力系统机组组合优化调度方法,适用于IEEE14、IEEE30和IEEE118节点标准测试系统。该资源聚焦于电力系统中发电机组的优化调度问题,通过智能优化算法实现对机组启停、出力分配等决策的最优化,旨在降低运行成本、提升系统可靠性和经济性。文中系统阐述了从数学模型构建、多类型约束处理到优化算法设计与仿真实验验证的完整研究流程,并提供了可复现的Matlab代码,涵盖目标函数设定、约束条件建模及算法求解过程,适用于电力系统调度、能源优化等相关领域的科研与教学实践。; 适合人群:具备电力系统分析、运筹学基础及Matlab编程能力的高校学生、科研人员和工程技术人员,尤其适合从事电力系统优化、智能算法应用研究的研究生与青年学者。; 使用场景及目标:①用于电力系统机组组合(UC)问题的教学实验与课程设计;②支撑科研工作中对遗传算法、粒子群算法等智能优化算法在电力系统调度中应用的研究;③为含可再生能源接入的现代电网调度提供仿真平台与技术参考,助力低碳电力系统规划与运行。; 阅读建议:建议读者结合电力系统调度理论与优化建模知识,深入理解机组组合问题的数学本质与物理约束,再通过Matlab代码进行仿真实践,重点关注算法收敛性、多目标权衡策略与不同测试系统间的性能对比,以实现理论与实践的深度融合。

65,213

社区成员

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

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