2011-06-28 117 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

您可以return只需0。因爲在邏輯上,在任何情況下,0是任何以nul結尾的字符串中的第一個非重複字符!

我認爲返回-1是容易出錯的,因爲您要投射到int而且255也是一個有效的字符。

+0

字符串可能不一定是空的終止......那只是一個c方式來表示字符串的結尾 –

+0

@Amm Sokun,但在你的邏輯中,你將檢查字符串,直到null ..正確。所以在這種情況下,這是一個有效的想法。如果你檢查字符數組的大小,那麼你可以爭論,但是你在你的問題中提到了'string'。 – iammilind

1

這可能是一個風格問題,但我寧願去的東西,如:

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

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

當通話結束後c的價值是不確定的,如果getFirstNonRepeating回報false

這樣一來,有操作的返回值,並將結果(或失敗)之間不存在歧義,如果你需要更改邏輯您getFirstNonRepeating功能可以正常工作,甚至爲'\0'0xFF字符。

0

只有一個選擇:要更類似於STL算法,您可以將迭代器返回到第一個非重複字符,如果缺少它,只需返回string.end()。

相關問題