2017-05-22 13 views
-1

私は文字が元の文字列に表示されるたびに1つを追加する文字列を使用してアナグラムをチェックするcoeを構築しようとしています。使用してstrcmp

私はstrcmpと2つの文字列を比較することでこれをやっていますが、何らかの理由で私はいつも文字列が同じではなくても同じであることを知っています。

ありがとうございました!

int firstWord[] = { 0 }, secondWord[] = { 0 }, len, i, j, anagrams=0; 
char string[1000]; 

gets_s(string, sizeof(string)); 
len = strlen(string); 
i = 0; 
while (i < len) { 
    if (string[i] == ' ') { 
     for (j = i + 1; j < len; j++) { 
      secondWord[string[j]]++; 
     } 
    } 
    if (string[i] != ' ') 
     firstWord[string[i]]++; 
    if (strcmp(firstWord, secondWord) == 0) { 
     anagrams++; 
    } 
    i++; 
} 
+0

'firstWord'と' secondWord'を埋めるためにあなたのコードを見て、私は、彼らはあなたが彼らがやっていると思う何をやっているとは思わない... それは** firstWord'が終わる 'のように私には見えます**空白ではないすべての文字で始まります。そして、 'secondWord'はスペースの後の文字から始まる行の内容を持っています。 –

+0

あなたが達成したい実際の目的は何ですか...それほど明確ではありません...しかしアドバイスの言葉...文字として配列のインデックスを持つことを避けてください...あなたは大きなトラブルにも貸し出しができます非常に予期しない結果 –

+0

@ShreyanMehtaリプレイのためにこんにちは感謝します。私は2つの単語がお互いのanagramsているかどうかを確認することができるように、各単語が各単語に何回出現するかを数えようとしていますが、何らかの理由で比較が行われないということです、if(strcmp(何らかの理由で – user7792712

答えて

2

あなたの配列firstWordsecondWordは、各容量のみで単一intを持っています。あなたのコードが想定しているように、配列は動的にサイズ変更されません。

int firstWord[] = { 0 } 

このコードは、値0とそれに正確要素を持つ配列を作成することを意味します。

次の行:

firstWord[string[i]]++; 
secondWord[string[j]]++; 

壊れランダムメモリと両方がは、すべての配列を拡張しません。

+0

申し訳ありませんが、私は文字列を例えばfirstWord [300]に変更すると、secondWord [300]はまだ動作しません – user7792712

+0

@ user7792712 'strcmp'の直前に' firstWord'と 'secondWord'の内容を印刷してみてくださいあなたはあなたが思うものを比較しています。 –

+0

mmmこれは束または乱数を印刷します....これを解決する方法は何ですか? – user7792712