Написать программу, которая для введённой с клавиатуры строки (максимальная длина строки — 80 символов, использовать символьный
массив) сообщает, какая цифра в ней встречается чаще всего, либо сообщает, что цифры в строке совсем отсутствуют. Если с одинаковой частотой в строке встретилось несколько цифр, то в качестве лидера вывести любую из подходящих цифр. Для обхода строк использовать указатели.
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int max = 0;
char str[80];
char* p = str;
char* j = p;
char* mx = nullptr;
int count;
cout << "Введите строку \nМаксимальный размер: " << sizeof(str) << endl;
cin >> str;
while (*p != '\0')
{
count = 0;
j = str;
for (int i = 0; i < sizeof(str) - 1; i++)
{
if (((short)*p) == ((short)*j))
count++;
if ((count >= max) && (((short)*p) > 47 && ((short)*p) < 58))
{
max = count; mx = p;
}
j++;
}
*p++;
}
if (max > 0)
cout << "Наиболее часто встречается число " << *mx << " ,встретилось " << max << " раза" << endl;
else
cout << "В строке нет ни одного числа\n";
return 0;
}
Для начала, нам понадобится символьный массив для хранения введенной строки, а также переменные для подсчета частоты встречаемости каждой цифры. Для обхода строки будем использовать указатель.
Вот полный код программы:
```cpp
#include
#include
using namespace std;
int main() {
const int MAX_LENGTH = 80;
char line[MAX_LENGTH + 1]; // +1 для символа '\0' в конце строки
cout << "Введите строку: ";
cin.getline(line, MAX_LENGTH + 1);
int digitCounts[10] = {0}; // массив для хранения частоты встречаемости цифр
char* p = line; // указатель для обхода строки
while (*p != '\0') {
if (*p >= '0' && *p <= '9') {
digitCounts[*p - '0']++; // увеличиваем счетчик соответствующей цифры
}
p++;
}
bool isDigitPresent = false;
int maxCount = 0;
int mostFrequentDigit = -1;
for (int i = 0; i < 10; i++) {
if (digitCounts[i] > 0) {
isDigitPresent = true;
if (digitCounts[i] > maxCount) {
maxCount = digitCounts[i];
mostFrequentDigit = i;
}
}
}
if (isDigitPresent) {
cout << "Самая часто встречающаяся цифра: " << mostFrequentDigit << endl;
} else {
cout << "Цифры в строке отсутствуют." << endl;
}
return 0;
}
```
Теперь я объясню основные шаги программы:
1. Мы объявляем символьный массив `line` для хранения введенной строки. Максимальная длина строки установлена на 80 символов, но мы выделяем 81 элемент в массиве для символа `'\0'`, который обозначает конец строки.
2. После приветствия программа ждет ввода строки с клавиатуры с помощью `cin.getline()`.
3. Затем мы создаем массив `digitCounts` и заполняем его нулями. Этот массив будет использоваться для подсчета частоты встречаемости цифр. Каждый элемент массива соответствует одной цифре (от 0 до 9).
4. Адрес первого символа массива `line` присваивается указателю `p`. Мы используем указатель `p` для обхода строки.
5. В цикле `while` мы проверяем каждый символ `*p` строки. Если символ является цифрой (от '0' до '9'), то мы увеличиваем соответствующий элемент `digitCounts[*p - '0']` массива `digitCounts`.
6. В дополнительной переменной `isDigitPresent` мы храним информацию о том, встретились ли цифры в строке.
7. Затем мы проходим по массиву `digitCounts` и находим цифру с наибольшей частотой встречаемости. Если цифра имеет максимальную частоту `maxCount`, мы сохраним ее и сохраняем в `mostFrequentDigit`.
8. В зависимости от значения `isDigitPresent` мы выводим результат: либо самую часто встречающуюся цифру, либо сообщение о отсутствии цифр в строке.
9. Наконец, возвращаем ноль из функции `main()`.
Теперь вы можете использовать эту программу для нахождения самой часто встречающейся цифры во введенной строке. Учтите, что программа будет сравнивать цифры, используя символьные коды ASCII. Если вы хотите читаемый вывод, вы можете добавить `'0'` к `mostFrequentDigit` перед выводом на экран.