2011-06-28 15 views
0

文字列に与えられた最初の非繰り返し文字を返さなければならないというこの問題を解決しなければなりませんでした。最初の非繰り返し文字列を返します

ハッシュテーブルを使用して解決し、文字列を定数参照して最初の非繰り返し文字を返すメソッドを作成しました。しかし、非反復文字が文字列中に存在しないとき、私は-1を返し、

char c = firstNonRepeating(word); 
if (static_cast<int> (c) == -1) 
    cout<<"no non repeating character present\n"; 
else 
    cout<<c<<endl; 

は正しい方法を返すようにすることを-1文字が存在しない、必要な場合で、次のようにメインプログラムの中で私がチェックしますか?

答えて

2

return0とすることができます。論理的には、いかなる場合でも、0は、ヌル終端文字列の最初の非繰り返し文字です!

-1intへのキャストを行い、さらに255も有効な文字なので、エラーが発生しやすいと思います。

+0

文字列の終わりを示すCの方法です。 –

+0

@Amm Sokunしかし、あなたのロジックでは、nullになるまで文字列をチェックします。そのような場合には、それは有効な考えです。文字配列のサイズを調べると議論することができますが、あなたの質問では 'string'と述べました。 – iammilind

1

それはスタイルの問題かもしれないが、私はむしろのようなもののために行くだろう:コールの後cの値が指定されていない

char c; 
bool result = getFirstNonRepeating(word, c); 

if (result) 
    cout << "no non repeating character present\n"; 
else 
    cout << c << endl; 

getFirstNonRepeatingあればリターンfalse

そうすれば、そこに操作の戻り値と結果(または失敗)の間には曖昧さがなく、あなたが今までにロジックを変更する必要がある場合は、あなたのgetFirstNonRepeating機能がさえ'\0'または0xFF文字のために働くことができます。

0

もう1つのオプション:STLアルゴリズムに似ているため、反復子を最初の非繰り返し文字に戻すことができます。不在の場合は単純にstring.end()を返します。

関連する問題