2017-07-05 6 views
0

これは、次の問題を解決するためのプログラムです。「2つの文字列が与えられ、同じ長さであってもなくても、必要な文字削除の最小数どちらの文字列からも任意の文字を削除することができます "。結局、両方の文字列は同じ文字と同じ文字を持つはずです。たとえば、文字列A = ccda String B = dcac 私のロジックは、両方の文字列で同じ文字をダミー文字列 "0"と置き換えることです。だから私は "0"と等しくない各文字列の文字の数を数えると、それは私に削除の数を与える。 しかし、これがなぜ特定のケースで失敗するのかわかりません。それが失敗したテストケースのAnagram - 削除に失敗したテストケースの最小数

#include <math.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <assert.h> 
#include <limits.h> 
#include <stdbool.h> 

int main(){ 
    int count =0; 
    const char dummy= '0'; 
    int i =0, j=0; 
    char* a = (char *)malloc(512000 * sizeof(char)); 
    scanf("%s",a); 
    char* b = (char *)malloc(512000 * sizeof(char)); 
    scanf("%s",b); 
    for (i=0;a[i]!= '\0' ;i++){ 
     for(j=0; b[j]!= '\0';j++){ 
     if (a[i]==b[j]){ 
      a[i]= dummy; 
      b[j]= dummy; 
     } 

     } 
    } 
    for (i=0;a[i]!= '\0' ;i++){ 
     if(a[i]!= dummy){ 
     count = count+1; 
     } 
    } 
    for (i=0;a[i]!= '\0' ;i++){ 
     if(b[i]!= dummy){ 
     count = count+1; 
     } 
    } 
    printf("%d",count); 
    return 0; 
} 

一つ 文字列Aました:fcrxzwscanmligyxyvym 文字列Bは:与えられた の検索結果をjxwtrhvujlmrpdoqbisbwhmgpmeoke:22 期待される結果:30

を誰もがここでエラー私をポイントしてくださいことができます。どうもありがとうございました!

+1

今、デバッガの使い方を学ぶのに最適な時期です。デバッガを使用すると、変数とその値を監視しながら、コードを1行ずつ進めることができます。失敗した入力に対してこれを行い、あなたのプログラムで何が起こるかを見てください。 –

+0

@Someprogrammerdudeありがとうございました:) –

答えて

0

コードでエラーが発生しました.2番目のループで無効な状態です。マークされた時点で

for (i=0;a[i]!= '\0' ;i++){ 
    if(a[i]!= dummy){ 
    count = count+1; 
    } 
} 
for (i=0;a[i]!= '\0' ;i++){ 
     ^^^^ 
    if(b[i]!= dummy){ 
    count = count+1; 
    } 
} 

b[i]ではなくa[i]でなければなりません。

マイナーニックピッキング:コード作成を学んでいるので、行くにつれて有用なハビットを得ることはほとんどありません。コードはきれいでなければなりません(あまりにもかわいいですが、あなたは気になりませんが高潔です) - あなたと他の人のために読むのを簡単にするのに役立ちます。結果は重要です。演算子の周りにスペースを入れる場合は、どこでも実行します。レイアウトは重要です。それらのすべては、あなたが(プロにも共通して、彼らはただちに見つけることができる)間違いに気付くのを助けるでしょう。 実行パフォーマンスに関しては、より良いアルゴリズムがあります。 :)

+0

OMG、ありがとうございます。私はそれに気付かなかった。私はとても馬鹿だと感じる!今は完璧に動作します。ありがとうございました –

+0

ありがとう、私は確かにそれに従います:)と良いロジックは何ですか? –

+0

ああ、それはティーザーです - あなたはそれを自分で理解することができるはずです。 :)(あなたが傾けている場合は、アナグラムのためにSOを探し、私はどこかでそれを見たことがある)。 –

関連する問題