这是一个字谜程序,我正在检查两个相同长度的字符串是不是相互字谜
Posted
技术标签:
【中文标题】这是一个字谜程序,我正在检查两个相同长度的字符串是不是相互字谜【英文标题】:This is an anagram program where I am checking if two same length strings are anagram to each other这是一个字谜程序,我正在检查两个相同长度的字符串是否相互字谜 【发布时间】:2019-12-05 09:01:45 【问题描述】:if 语句由于某种原因没有终止 while 循环,这会导致不需要的输出(多个输出)。我希望有人能帮帮忙。谢谢。
my code
【问题讨论】:
欢迎来到 Stack Overflow。请阅读the help pages,获取the SO tour,了解how to ask good questions,以及this question checklist。最后,请了解如何创建一个minimal reproducible example 向我们展示,在问题本身。并且不要显示文本图像,将其复制粘贴作为文本。 我也推荐你学习how to debug your programs。也许关于break
声明。
查看 if 语句的结尾。否则声明什么都不做。如果 bool_ = false,它将返回 for 循环。您应该添加 break 以退出循环
最后请阅读Why should I not #include <bits/stdc++.h>?
这段代码bool_ = false;
终止了外部循环,您编写的终止内部循环的代码中没有任何内容。内部循环是您从中获取输出的地方。
【参考方案1】:
我认为你应该在 if 中 return false
。试试这个代码。
#include <bits/stdc++.h>
using namespace std;
bool areAnagram(string str1, string str2)
int n1 = str1.length();
int n2 = str2.length();
if (n1 != n2)
return false;
sort(str1.begin(), str1.end());
sort(str2.begin(), str2.end());
for (int i = 0; i < n1; i++)
if (str1[i] != str2[i])
return false;
return true;
int main()
string str1 = "test";
string str2 = "ttew";
if (areAnagram(str1, str2))
cout << "The two strings are anagram of each other";
else
cout << "The two strings are not anagram of each other";
return 0;
【讨论】:
请不要在没有说明与 OP 发布的代码有何不同的情况下发布代码。解释性答案总是比复制粘贴的代码好,因为仅代码的答案往往会导致 cargo cult programming 这很糟糕。【参考方案2】:首先,您的if
语句不会破坏内部循环。这意味着您将输出短语“NOT ANAGRAM”排序数组不同的次数。实际上,次数减一(可能),因为第二个:内部循环比较的元素比它应该的少。你应该迭代到i < len
。
第三,不管是不是字谜,程序总是会在最后输出“ANAGRAM”,因为你在这个输出之后设置了bool_ = false
。
【讨论】:
【参考方案3】:@tash29 和 @D.Khumoyun
std::string 有一个 ==
运算符。您可以通过简单地编写if (a == b)
来比较一个字符串。不需要逐字节比较。
如果你使用 C++ 三元条件运算符,你可以在一行中完成所有重要的事情。
对不起,任务太简单了,我无法解释。 . .
请看:
#include <iostream>
#include <string>
#include <algorithm>
int main()
std::string a = "ajar";
std::string b = "stag";
std::sort(a.begin(), a.end());
std::sort(b.begin(), b.end());
std::cout << ((a == b) ? "Anagram" : "Not Anagram");
return 0;
【讨论】:
以上是关于这是一个字谜程序,我正在检查两个相同长度的字符串是不是相互字谜的主要内容,如果未能解决你的问题,请参考以下文章