这是一个字谜程序,我正在检查两个相同长度的字符串是不是相互字谜

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 &lt; 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;

【讨论】:

以上是关于这是一个字谜程序,我正在检查两个相同长度的字符串是不是相互字谜的主要内容,如果未能解决你的问题,请参考以下文章

字谜排序版本与计数字符版本

一种可能的算法来确定两个字符串是不是是彼此的字谜? [关闭]

Swift Anagram 检查器

如何检查两个字符串是不是是字谜?

在不到一秒的时间内执行一个字谜检查器算法

字谜递归Scala