C ++ Как найти char в массиве char с помощью функции find? - PullRequest
5 голосов
/ 30 октября 2010

Как найти char в массиве char с помощью функции find?Если бы я просто зациклил гласную, я мог бы получить ответ, но меня попросили использовать std :: find .. Спасибо.

bool IsVowel (char c) { 

    char vowel[] = {'a', 'e', 'i', 'o', 'u'};            
    bool rtn = std::find(vowel, vowel + 5, c);

    std::cout << " Trace : " << c  << " " << rtn << endl;

    return rtn; 
 }

Ответы [ 4 ]

6 голосов
/ 30 октября 2010
bool IsVowel (char c) { 

    char vowel[] = {'a', 'e', 'i', 'o', 'u'};
    char* end = vowel + sizeof(vowel) / sizeof(vowel[0]);            
    char* position = std::find(vowel, end, c);

    return (position != end); 
 }
2 голосов
/ 15 июля 2015

Упрощение и исправление

inline bool IsVowel(char c) {
    return std::string("aeiou").find(c) != std::string::npos;
}

Посмотреть демо http://ideone.com/NnimDH.

2 голосов
/ 30 октября 2010

std::find(first, last, value) возвращает итератор для первого элемента, который соответствует value в диапазоне [first, last). Если совпадений нет, возвращается last.

В частности, std :: find не возвращает логическое значение. Чтобы получить искомое логическое значение, вам нужно сравнить возвращаемое значение (без преобразования его в логическое значение первым!) Для std :: find с last (т. Е. Если они равны, совпадение не найдено).

0 голосов
/ 30 октября 2010

Использование:

size_t find_first_of ( char c, size_t pos = 0 ) const;

Ссылка: http://www.cplusplus.com/reference/string/string/find_first_of/

...