2015-10-14 46 views
1

我的anagram程序在我的dev-cpp中工作得很好,但是在任何在线测试人员都会在任何测试字符串上抛出错误的答案。有人能帮我吗?Anagram程序测试

#include<iostream> 
#include<cstring> 
using namespace std; 

int main() 
{ 

    char input1[10000]; 
    char input2[10000]; 
    cin >> input1; 
    getchar(); 
    cin >> input2; 
    getchar(); 

    int leng; 
    leng = strlen(input1); 
    bool output[leng]; 

    for(int i=0; i<leng; i++){ 
      for(int y=0; y<leng; y++){ 
        if(input1[i] == input2[y]){ 
         output[i] = true; 
        } 
      } 
    } 

    for(int o=0; o<leng; o++){ 
     if((o+1) == leng){ 
      if(output[o] == true){ 
       cout << "ano" << endl; 
       break; 
      } 
     }else if(output[o] == true) { 
       continue; 
     } 
     cout << "nie" << endl; 
     break; 
    } 


    getchar(); 
    return 0; 
} 
+1

你能在你的问题中展示一个适合你的例子,但不能在线吗? – agold

+0

大概... kalerab mrkvicka ......在PC它抛出我的“不”,但在线“是”,但林不知道有关例子 – Xengo

回答

0

您的算法存在问题。想象一下以下情形:

Input1: ab 
Input2: cdefab 

你的算法将返回OK,因为它只会检查输入1的& B个字符出现在输入2。

同样的问题举例如:

Input1: aaaaaa 
Input2: a 

或者:使用256(指数的数组

  • 计数字符:

    Input1: aaaab 
    Input2: bbbba 
    

    你可以改变你的算法你的ASCII字符)int初始化为0.递增input1和递减input2,最后您的数组应该填充0. O(n)算法

  • 对两个输入进行排序并将它们的字符进行比较。 O(n^2)算法

你可以找到更多关于这些算法here的细节。

1

而不是试图重新发明轮子,有一个整洁的功能is_permutation<algorithm>,可以使这个问题微不足道。 。

#include <algorithm> 

bool isAnagram(std::string a, std::string b) { 
    if(a.size() == b.size()) { 
     return std::is_permutation (a.begin(), a.end(), b.begin(), [](char x, char y){return std::tolower(x) == std::tolower(y);}); 
    } 
    return false; 
} 

只要删除二元预测,如果你想区分大小写。 Try it here

+2

你是完全正确的,但我觉得OP是试图实现他自己的算法,以便学习编程......这只是我的一个想法。 –

+0

是的,我只是学习,但谢谢你们。我知道哪里犯了错误。 – Xengo