Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Вариант с STL:
Код: Выделить весь код
// я заметил что вы лепите все примеры в одну функцию - ОТВЫКАЙТЕ!
// тем самым вы усложняете себе понимание, а компилятору - работу
// будем считать что слово состоит только из букв
bool is_ru_alpha(int c) {
  // кодировка win-1251
  return unsigned(c - 'А') <= 63;
}

bool skipNotWord(streambuf& stm) {
  do {
    if (is_ru_alpha(stm.sgetc())) return true;
  } while(0<=stm.sbumpc());
  return false;
}

void getWord(streambuf& stm, string& output) {
  output.clear();
  while(is_ru_alpha(stm.sgetc()) {
    output.push_back(char(stm.sbumpc()));
  }
}

inline bool isVocal(const char& c) {
  // а можно и таблично сделать
  return c=='а' || c=='о' || c=='у' || c=='ы' || c=='и';
}

int main() {
  streambuf* input = cin.rdbuf();
  if (input) {
    string word, max_word;    
    unsigned count, max_count=0;
    while(skipNotWord(*input)) {
       getWord(*input, word);
       count = count_if(word.begin(), word.end(), isVocal);
       if (max_count < count) {
         max_count = count;
         max_word = word;
      }
    }
  }

  if (max_count) {
    cout << "found '" << max_word <<"' of " << max_count << " vocals" << endl;
  } else {
    cout << "not found word of vocals" << end;
  }
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:45, 19-11-2012 | #3