Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
corpdelta
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 15
#1

Напечатать букву, которая входит в наибольшее количество слов этой последовательности - C++

19.03.2014, 19:52. Просмотров 419. Ответов 3
Метки нет (Все метки)

Дана непустая последовательность из строчных латинских букв, между соседними словами - запятая, за последним словом точка. Напечатать букву, которая входит в наибольшее количество слов этой последовательности.
Программа уже готова. Только надо понять как она работает. Ребята если не трудно объясните что происходит на каждой строке. Простыми словами.
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
26
27
28
29
30
31
32
int main(int argc, char* argv[])
{
    int C1[256],C2[256];
    int i,j,l,k,m;
    char *S="ffag,ddaf,asdf,qwefrty";
    char c;
 
    l=strlen(S);
 
    for (i=0; i<256; i++) {C1[i]=0;C2[i]=0;}
 
    for (i=0; i<l; i++)
    { 
        if (S[i]==',')
            for (j=0; j<256; j++) {C1[j]=C1[j]+C2[j]; C2[j]=0;}
        else
        {
            k=S[i];
            C2[k]=C2[k] | 1;
        }
    }
 
    for (j=0; j<256; j++) C1[j]=C1[j]+C2[j];
 
    m=C1[0];
    i=0;
    for (j=1; j<256; j++) 
        if (C1[j] > m) 
        {
            m=C1[j];
            i=j;
        }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2014, 19:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Напечатать букву, которая входит в наибольшее количество слов этой последовательности (C++):

Найти и вывести ту строку в этой матрице, которая содержит наибольшее количество четных чисел - C++
Добрый день! Помогите с реализацией данного алгоритма? Дана матрица А размерности n на n. Найти и вывести ту строку в этой матрице,...

Найти общее количество слов и количество слов на букву ''с'' - C++
Выдает ошибку, что kol неинициализироанная переменная #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;locale&gt; ...

Напечатать последовательность, удалив из слов заданную букву - C++
дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 символов; между соседними словами - производное кол-во...

Cтрока: Определить количество средних слов в строке и какое из слов начинается на большую по коду букву - C++
Определить количество средних слов в строе и какое из слов начинается на большую по коду букву. Напишите плз код данной программы...

Определить, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу. - C++
Дана последовательность натуральных чисел, завершающаяся числом 0. Определить, какое наибольшее число подряд идущих элементов этой...

В заданной последовательности слов заменить первую букву каждого слова заглавной - C++
1. Дана последовательность слов. Напечатать все слова, предварительно вы*полнив преобразования их по правилу: заменить во всех словах...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
FireOwl
62 / 44 / 5
Регистрация: 01.07.2009
Сообщений: 145
19.03.2014, 20:32 #2
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
int main(int argc, char* argv[])
{
    // Переменные для вычислений
    // С1 и С2 здесь - массивы соответствующие 256 знакам ASCII таблицы
    int C1[256],C2[256];
    int i,j,l,k,m;
    // Та самая не пустая последовательность
    char *S="ffag,ddaf,asdf,qwefrty";
    char c;
 
    // Вычислили длину последовательности
    l=strlen(S);
 
    // Обнулили массивы C1, C2
    for (i=0; i<256; i++) {C1[i]=0;C2[i]=0;}
 
    // Пробежали по всей длине последовательности
    for (i=0; i<l; i++)
    { 
        // Если символ последовательности под номером i это запятая
        if (S[i]==',')
            // Приплюсовали значения из С2 в соотв. ячейки С1, а С2 обнулили
            for (j=0; j<256; j++) {C1[j]=C1[j]+C2[j]; C2[j]=0;}
        else
        {
            // Получили ASCII код текущей буквы
            k=S[i];
            // И ячейку С2 с этим кодом сделали равной 1
            C2[k]=C2[k] | 1;
        }
    }
 
    // Приплюсовали значения из С2 в соотв. ячейки С1
    for (j=0; j<256; j++) C1[j]=C1[j]+C2[j];
 
    // m - количество раз, которое в последовательности встречается первый ASCII знак
    m=C1[0];
    i=0;
    // Теперь идем по массиву дальше и ищем тот знак, который встречался
    // чаще. Его записываем в m, а его номер в массиве - в j.
    for (j=1; j<256; j++) 
        if (C1[j] > m) 
        {
            m=C1[j];
            i=j;
        }
}
corpdelta
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 15
26.03.2014, 20:57  [ТС] #3
Ребята у меня буквально только один вопрос. Программу я написал. Но так как занимаюсь этим недавно возник вопрос. В программе я указал все 256 символов ASCII кодировки (то есть расширенную версию). Но мне надо чтобы присутствовали только 26 латинских прописных букв. (это видно условия задачки). Помогите как сделать чтобы присутсвовало только латинсике прописные.
Дана непустая последовательность из строчных латинских букв, между соседними словами - запятая, за последним словом точка. Напечатать букву, которая входит в наибольшее количество слов этой последовательности.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "stdafx.h"
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    //Переменные для вычислений
    // С1 и С2 здесь - массивы соответствующие 256 знакам ASCII таблицы
    int C1[122], C2[122];
    int i, j, l, k, m;
 
    //// Та самая не пустая последовательность
    char *S = "ffag,ddaf,asdf,qwefrty";
    char c;
 
    //// Вычислили длину последовательности
    l = strlen(S);
 
    //// Обнулили массивы C1, C2
    for (i = 0; i<256; i++) { C1[i] = 0; C2[i] = 0; }
 
    // Пробежали по всей длине последовательности
    for (i = 0; i<l; i++)
    {
        // Если символ последовательности под номером i это запятая
        if (S[i] == ',')
 
        // Приплюсовали значения из С2 в соотв. ячейки С1, а С2 обнулили
        for (j = 0; j<256; j++) { C1[j] = C1[j] + C2[j]; C2[j] = 0; }
        else
        {
            // Получили ASCII код текущей буквы
            k = S[i];
 
            // И ячейку С2 с этим кодом сделали равной 1
            C2[k] = C2[k] | 1;
        }
    }
 
    // Приплюсовали значения из С2 в соотв. ячейки С1
    for (j = 0; j<256; j++) C1[j] = C1[j] + C2[j];
 
    // m - количество раз, которое в последовательности встречается первый ASCII знак
    m = C1[0];
    i = 0;
    // Теперь идем по массиву дальше и ищем тот знак, который встречался
    // чаще. Его записываем в m, а его номер в массиве - в j.
    for (j = 1; j<256; j++)
    if (C1[j] > m)
    {
        m = C1[j];
        i = j;
    }
    c = i;
    cout <<"Наиболее часто встречается: "<< c << endl;
    system("PAUSE");
}
Добавлено через 13 минут
Там в массивах С1 и С2 должно было быть написано 256. исправить забыл(
zitxbit
Master C/C++
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
26.03.2014, 21:15 #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
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
int main(int argc, char* argv[])
{
    static char str[256] = "apple,fruit,orange,help,work.\0";
 
    printf("%s\n",str);
 
    char ch = '\0'; int max_count = 0;
    for (int i = 0; str[i] != '\0'; i++)
    {
        int count = 0;
        char* wd = strtok(str, ",");
        while (wd != NULL)
        {
            if (strchr(wd, str[i]) != NULL)
                count++;
 
            wd = strtok(NULL, ",");
        }
 
        if (count > max_count || max_count == 0)
         { max_count = count; ch = str[i]; }
    }
 
    printf("%c --> %d\n",ch,max_count);
 
    _getch();
 
    return 0;
}
http://codepad.org/DLOmHNTe
Миниатюры
Напечатать букву, которая входит в наибольшее количество слов этой последовательности  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 21:15
Привет! Вот еще темы с ответами:

Наибольшее количество слов - C++
Помогите пож...Дается последовательновсть из строчных латинских букв,между соседними словами-запятая,за последним словом точка.Напечатаь...

Подсчитать количество слов содержащих букву а. - C++
Дана строка, состоящая из n символов. Группы символов, разделенные пробелами и не содержащие пробелов внутри себя, будем называть словами....

Напечатать сначала все отрицательные числа этой последовательности, затем все положительные - C++
Дана последовательность ненулевых целых чисел, за которой следует 0. Напечатать сначала все отрицательные числа этой пос¬ледовательности,...

Найти количество элементов этой последовательности, кратных числу К - C++
Задача: дана последовательность целых чисел, за которой следует 0.Найти количество элементов этой последовательности, кратных числу...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.03.2014, 21:15
Ответ Создать тему
Опции темы

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