13.04.2014, 17:41 | #1 (permalink) |
Новичок
Регистрация: 18.12.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: -20
|
Счетчики С++
Код:
#include <iostream> using namespace std; void mostRecent(char *, char *); // прототип функции поиска часто встречающегося слова int main(int argc, char* argv[]) { setlocale(LC_ALL, "rus"); // установка локалии cout << "Введите текст:\n"; const int buff_size = 1001; // максимальное количество вводимых символов + позиция под '\0' char buff_text[buff_size]; // символьный массив, который хранит введённый текст char word[30]; // строка, в которй будет храниться искомое слово mostRecent(gets(buff_text), word); // вызов функции поиска часто встречающегося слова for (int counter = 0; counter < strlen(word); counter++) word[counter] = toupper(word[counter]); // преобразование символов слова в верхний регистр cout << "Cамое часто встречающееся слово в тексте: " << word << endl; system("pause"); return 0; } void mostRecent(char * text, char *word) // функция поиска часто встречающегося слова { int words_counter = 0; // количество слов в тексте char *arrayPtr[1000]; //массив указателей на строки, в которых будут храниться слова из текста arrayPtr[0] = strtok(text, " "); // нулевому указателю присваеваем первое слово // подсчёт количества слов во введённом тексте while (arrayPtr[words_counter] != NULL) // пока в тексте есть слова { words_counter++; // инкремент счётчика слов arrayPtr[words_counter] = strtok(NULL, " "); // очередное слово сохраняем в массиве } bool first_iter = true, // флаг определяющий этап первой итерации go = false; int max_number1 = 0, // количество слов max_number2 = 0, // количество слов max_word = 0, // индекс самого часто встречающегося слова flag = 0; // флаг, подсчёта двух итераций int index1, index2; for (int counter1 = 0; counter1 < (words_counter - 1); counter1++) // перебор слов, начиная с первого и заканчивая предпоследним { flag++; // инкремент итераций for (int counter2 = counter1 + 1; counter2 < words_counter; counter2++) // перебор слов, начиная со второго и заканчивая предпоследним { if (strcmp(arrayPtr[counter1], arrayPtr[counter2]) == 0) // сравниваем два слова if (first_iter) // если первая итерация (то есть сюда заходим один раз) { max_number1++; // инкремент переменной, подсчитывающей количество одинаковых слов first_iter = false; // меняем условие оператора if index1 = counter1; } else { max_number2++; // инкремент переменной, подсчитывающей количество одинаковых слов index2 = counter1; } } if (flag == 2 || go) // если прошли две итерации, или поэлементный проход разрешён { if (max_number1 >= max_number2) // если количество первого слова больше количества второго слова { max_word = index1; // присваиваем индекс самого часто повторяющегося слова } else { max_word = index2; max_number1 = max_number2; } // присваиваем индекс самого часто повторяющегося слова и количество появления второго слова присваиваем переменной max_number1 flag = 0; // обнуляем счётчик итераций go = true; // разрешить поэлементный проход } max_number2 = 0; // обнуляем накопленное количество появления второго слова } strcpy(word, arrayPtr[max_word]); // возвращаем результат поиска самого часто встречающегося слова } |
13.04.2014, 17:41 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Обычно первым делом эффективнее всего прочитать похожие темы Продам счетчики Г-Мюллера СИ-29БГ. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Метки |
с++, счетчик |
Опции темы | |
Опции просмотра | |
|
|