2011-06-28 80 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()。

相关问题