【问题标题】: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

【问题讨论】:

标签: c++ anagram


【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 2021-01-11
      • 2019-05-02
      • 2013-08-18
      • 2021-10-10
      • 2018-09-22
      • 2016-02-16
      相关资源
      最近更新 更多