簡體   English   中英

使用 C++ 的 Anagram 代碼有時僅適用

[英]Anagram code using C++ only works sometimes

當我比較 Pizza 和 Pizza 或 aaa 和 aaa 等字符串時,我的代碼返回 0。 當我通過調試器運行代碼時,它顯示在我的第二個 for 循環中,它實際上是從第一個 for 循環向 arr1 添加元素。 我應該如何解決這個問題?

#include <bits/stdc++.h>
using namespace std;

int anagram(string s1,string s2){
  int array1[26]={0},array2[26]={0};
  //if string lengths are different
  if(s1.length()!=s2.length())
     return 0; //they are not anagrams
 //for string1
  for(int i=0;s1[i]!='\0';i++){
  //storing frequency for each letter in the string   
   array1[s1[i]-'a']++;     
  }

 //for string2
  for(int i=0;s2[i]!='\0';i++){
    //storing frequency for each letter in the string     
       array2[s2[i]-'a']++;   
  }
   //comparison step
    for(int i=0;i<26;i++){
    // if any letter has different no of occurence, 
   // then strings are not anagrams
    if(array1[i]!=array2[i]) 
       return 0;
   }

   return 1;// else they are anagrams
}

您的數組大小為 26。這意味着它可以容納 26 個項目。 但是,您要傳遞包含52 個唯一字符的字符串。 請記住,大寫和小寫字母具有不同的 ASCII 值!

所以'P' - 'a'可能不在數組的范圍內,因此將是未定義的行為。

您需要確保首先將字符轉換為小寫,即:

array1[tolower(s1[i])-'a']++;

您的代碼僅適用於小寫字符 解決方案:在計數前將每個字符轉換為小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM