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

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

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

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

19.03.2014, 19:52. Просмотров 397. Ответов 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++ Напечатать сначала все отрицательные числа этой последовательности, затем все положительные
C++ Определить, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу.
C++ Найти количество элементов этой последовательности, кратных числу
C++ Найти количество элементов этой последовательности, кратных числу К
C++ Подсчитать количество слов содержащих букву а.
Напечатать последовательность, удалив из слов заданную букву C++
C++ Найти и вывести ту строку в этой матрице, которая содержит наибольшее количество четных чисел
C++ Найти количество элементов этой последовательности без массива
C++ Определить количество слов в предложении, не содержащих букву “у”.
C++ Найти общее количество слов и количество слов на букву ''с''
В заданной последовательности слов заменить первую букву каждого слова заглавной C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
FireOwl
 Аватар для 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++
 Аватар для zitxbit
87 / 739 / 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
Миниатюры
Напечатать букву, которая входит в наибольшее количество слов этой последовательности  
Yandex
Объявления
26.03.2014, 21:15     Напечатать букву, которая входит в наибольшее количество слов этой последовательности
Ответ Создать тему
Опции темы

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