Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Vol4_OK
2 / 2 / 1
Регистрация: 11.09.2013
Сообщений: 85
1

Дана строка. Найти символ в строке, встречающийся наибольшее число раз

03.11.2014, 21:30. Просмотров 1066. Ответов 4
Метки нет (Все метки)

Дана строка. Найти символ в строке, встречающийся наибольшее число раз. Заранее спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2014, 21:30
Ответы с готовыми решениями:

Найти символ в строке, встречающийся наибольшее число раз
Дана строка. Найти символ в строке, встречающийся наибольшее число раз.

Найти символ в строке, встречающийся наибольшее число раз
Вот такая задачка, помогите пожалуйста: Дана строка. Найти символ в строке,...

Найти символ, встречающийся в файле наибольшее число раз
Есть вот такая задачка: Дан текстовый файл in. Найти символ, встречающийся в...

Найти символ, встречающийся в файле наибольшее число раз
Задача программы - найти символ, встречающийся в файле(дан файл F) наибольшее...

Найти символ в строке, встречающийся наименьшее число раз
Разработать программу согласно варианту задания. Максимальная длина строк не...

4
XZentus
201 / 199 / 65
Регистрация: 06.10.2013
Сообщений: 552
03.11.2014, 22:17 2
Лучший ответ Сообщение было отмечено Vol4_OK как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
 
int main(int argn, char **argc) {
    unsigned int *z = NULL, slen, i, max, index;
    if(argn != 2)
        exit(1);
    slen = strlen(argc[1]);
    z = (unsigned int*)calloc((unsigned int)pow(2, (sizeof(char) * 8)),
            sizeof(unsigned int));
    if(z == NULL)
        exit(2);
    for(i = 0; i < slen; i += 1)
        z[(unsigned int)argc[1][i]] += 1;
    for(max = z[0], i = index = 1; i < (pow(2, (sizeof(char) * 8))); i += 1) {
        if(max < z[i]) {
            max = z[i];
            index = i;
        }
    }
    printf("Symbol: '%c' (%i times)\n", (char)index, z[index]);
    return 0;
}
0
Vol4_OK
2 / 2 / 1
Регистрация: 11.09.2013
Сообщений: 85
04.11.2014, 17:28  [ТС] 3
А можно что нибудь по проще? Или комментарии дать?
0
XZentus
201 / 199 / 65
Регистрация: 06.10.2013
Сообщений: 552
04.11.2014, 21:54 4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
 
int main(int argn, char **argc) {
    unsigned int *z = NULL, slen, i, max, index;
    if(argn != 2) //строка передается первым аргументом командной строки. Если его нет - выход.
        exit(1);
    slen = strlen(argc[1]);
    z = (unsigned int*)calloc((unsigned int)pow(2, (sizeof(char) * 8)),
            sizeof(unsigned int)); //Это массив по размеру равный кол-ву возможных значений типа char.
    if(z == NULL) // Если не получилось выделить память
        exit(2);
    for(i = 0; i < slen; i += 1)
        z[(unsigned int)argc[1][i]] += 1; // инкрементируются ячейки, по индексу соответствующие очередному символу строки
    for(max = z[0], i = index = 1; i < (pow(2, (sizeof(char) * 8))); i += 1) {
        if(max < z[i]) { // обычный поиск максимального элемента в массиве
            max = z[i];
            index = i; // индекс максимального элемента
        }
    }
    printf("Symbol: '%c' (%i times)\n", (char)index, z[index]); // вывод результата
    return 0;
}
0
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
06.11.2014, 16:47 5
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
char max_symbol(char* str)
{
    static int counters[256];
    int i;
    for( i = 0; i < 256; ++i ) { counters[i] = 0; }
    int x;
    while( x = (unsigned char) *str++ ) {
        counters[x]++;
    }
    x = 0;
    for( i = 1; i < 256; ++i ) {
        if( counters[i] > counters[x] ) { x = i; }
    }
    return x;
}
 
int main(void)
{
    printf("%c\n", max_symbol("abracadabra"));
    return 0;
}
1
06.11.2014, 16:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2014, 16:47

Найти элемент матрицы, встречающийся в ней наибольшее количество раз
Ввести целочисленную матрицу размера n×n (n &lt; 10). Найти элемент матрицы,...

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

Функция принимает блоки данных (символ1, символ 2, строка), в каждой строке заменять символ 1 на символ 2
функция принимает блоки данный(символ1, символ 2 , строка), в каждом строке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru