вернуть первый неповторяющийся символ в строке - PullRequest
0 голосов
/ 28 июня 2011

Я должен был решить этот вопрос, в котором при заданной строке я должен был вернуть первый неповторяющийся символ, присутствующий в строке.

Я решил это с помощью хеш-таблицы и написал метод, который принимает постоянную ссылку на строку и возвращает первый неповторяющийся символ. Однако, когда в строке нет неповторяющихся символов, я возвращаю -1 и в основной программе я проверяю следующим образом

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

это правильный способ вернуть -1, если требуемый символ отсутствует?

Ответы [ 3 ]

2 голосов
/ 28 июня 2011

Вы можете return просто 0. Потому что по логике в любом случае 0 является первым неповторяющимся символом в любой строке с нулевым символом в конце!

Я думаю, что возвращение -1 подвержено ошибкам, потому что вы выполняете приведение к int и, кроме того, 255 также является допустимым символом.

1 голос
/ 28 июня 2011

Это может быть вопросом стиля, но я бы предпочел что-то вроде:

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 голосов
/ 28 июня 2011

Еще один вариант: чтобы быть более похожим на алгоритмы STL, вы можете вернуть итератор первому неповторяющемуся символу, в случае его отсутствия просто вернуть string.end ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...