Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
1

Найти частоту появления согласных букв в строке (перевод с С++)

24.01.2016, 10:49. Показов 1442. Ответов 8
Метки нет (Все метки)

условия: Найти частоту появления согласных букв в строке.
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 <iostream>
#include <string>
#include <map>
using namespace std;
 
int main() {
    string str;
    cin >> str;
    map<char,int> coll;
    char w[] = "qwrtpsdfghjklzxcvbnm";
    for( size_t i = 0; i < str.size(); i++ ) {
        for( int j = 0; j < 20; j++ ) {
            if( str[i] == w[j] ) {
                coll[w[j]]++;
                break;
            }
        }
    }
    for( const auto& i : coll ) {
        cout << i.first << '\t' << i.second << endl;
    }
    cin.sync();
    cin.get();
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2016, 10:49
Ответы с готовыми решениями:

В заданном тексте вычислить частоту появления каждой из 33 букв русского алфавита
Требуется написать программу, которая считывает русский текст и вычисляет частоту появления в этом...

Найти слово в строке, в котором минимальное количество согласных букв
помогите с программой... мое написанное: int glas; S1={'a','e','y','o','i','u'}...

Подсчитать количество согласных букв в строке
Ввести с клавиатуры строку текста. Подсчитать количество согласных букв в строке. Помогите...

Определить количество гласных и согласных букв в строке
Вобщем, задание было такое...Дана строка символов. Определить количество слов в строке. Вот...

8
76 / 75 / 51
Регистрация: 30.03.2013
Сообщений: 194
24.01.2016, 20:42 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

main.c
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#include "map.h"
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "RU");
 
    char str[256];
    puts("Введите строку");
    gets(str);
    char w[] = "qwrtpsdfghjklzxcvbnm";
    MAP coll;
    createMap(&coll);
 
    for(int i=0; str[i] != '\0'; ++i){
        for(int j=0; j < 20; ++j){
            if(str[i] == w[j]){
                int value;
                if(!getValueMap(&coll, w[j], &value)){
                    addToMap(&coll, w[j], value + 1);}
                else{
                    addToMap(&coll, w[j], 1);}
                break;}
        }
    }
 
    showMap(&coll);
    deleteMap(&coll);
    puts("Нажмите любую клавишу для выхода");
    _getch();
 
    return 0;
}
map.h
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef MAPH
#define MAPH
 
typedef struct _NODE{
    char key;
    int value;
}NODE;
 
typedef struct _MAP{
    NODE *node;
    int size;
}MAP;
 
void createMap(MAP *);
int addToMap(MAP *, char, int);
int getValueMap(MAP *, char, int *);
int deleteValueMap(MAP *, char);
void sortMap(MAP *, int);
void showMap(MAP *);
void deleteMap(MAP *);
 
#endif
map.c
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include "map.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void createMap(MAP *map)
{
    map->node = NULL;
    map->size = 0;
}
 
int addToMap(MAP *map, char key, int value)
{
    int added = 0;
 
    for(int i=0; i<map->size; ++i){
        if(map->node[i].key == key){
            map->node[i].value = value;
            added = 1;
            break;}
    }
 
    if(!added){
        NODE *tmp = (NODE *)calloc(map->size + 1, sizeof(NODE));
        if(tmp == NULL){
            return 1;}
        tmp = (NODE *)memcpy(tmp, map->node, map->size * sizeof(NODE));
        if(tmp == NULL){
            return 1;}
        tmp[map->size].key = key;
        tmp[map->size].value = value;
        if(map->node != NULL){
            free(map->node);}
        map->node = tmp;
        map->size++;}
 
    return 0;
}
 
int getValueMap(MAP *map, char key, int *value)
{
    for(int i=0; i<map->size; ++i){
        if(map->node[i].key == key){
            *value = map->node[i].value;
            return 0;}
    }
 
    return 1;
}
 
int deleteValueMap(MAP *map, char key)
{
    for(int i=0; i<map->size; ++i){
        if(map->node[i].key == key){
            NODE *tmp = (NODE *)calloc(map->size - 1, sizeof(NODE));
            if(tmp == NULL){
                return 1;}
            for(int j=i; j<map->size - 1; ++j){
                map->node[j] = map->node[j+1];}
            tmp = (NODE *)memcpy(tmp, map->node, (map->size - 1) * sizeof(NODE));
            if(tmp == NULL){
                return 1;}
            free(map->node);
            map->node = tmp;
            map->size--;
            return 0;}
    }
 
    return 1;
}
 
void sortMap(MAP *map, int direction)
{
    char value;
    int j;
 
    if(direction){
        for (int i = 1; i < map->size; ++i) {
            value = map->node[i].key;
            j = i;
            while (j > 0 && value < map->node[j - 1].key) {
                map->node[j].key = map->node[j - 1].key;
                --j;
            }
            map->node[j].key = value;
        }
    }else{
        for (int i = 1; i < map->size; ++i) {
            value = map->node[i].key;
            j = i;
            while (j > 0 && value > map->node[j - 1].key) {
                map->node[j].key = map->node[j - 1].key;
                --j;
            }
            map->node[j].key = value;
        }
    }
}
 
void showMap(MAP *map)
{
    for(int i=0; i < map->size; ++i){
        printf("%c : %d\n", map->node[i].key, map->node[i].value);}
}
 
void deleteMap(MAP *map)
{
    free(map->node);
    map->node = NULL;
    map->size = 0;
}
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
24.01.2016, 21:16 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main(void)
{
    char c;
    unsigned int i=0;
 
    while ((c=getchar())!='\n'){
        switch (c)
        {
        case 'a': case 'e' : case 'i' :case 'o': 
        case 'A': case 'E' : case 'I' :case 'O': /*тут уж гласные сами впишите*/
        i++; break;
            
        default: break;
        }
    
    }
    return i;
}
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
24.01.2016, 21:21  [ТС] 4
не выводит
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
24.01.2016, 22:36 5
C
1
printf("\n %d",i);
до return добавьте и
C
1
system("pause");
eсли windows
кстати, я там гласные написал вместо согласных. пропишите символы, которые вам нужно посчитать
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
24.01.2016, 22:42  [ТС] 6
а как сделать что бы количество гласных делил на общее количество?
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
24.01.2016, 22:53 7
объявляете еще переменную
C
1
unsigned int j=0;
перед switch(c)
C
1
++j;
C
1
if(j!=0)return i/j;
0
0 / 0 / 1
Регистрация: 06.12.2015
Сообщений: 215
24.01.2016, 22:58  [ТС] 8
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
#include <stdio.h>
 
int main(void)
{
    char c;
    unsigned int i=0;
    unsigned int j=0;
 
    while ((c=getchar())!='\n'){
            ++j;
      
        switch (c)
        {
        case 'a': case 'e' : case 'i' :case 'o': case'y' :case 'u':
        case 'A': case 'E' : case 'I' :case 'O': case'Y': case 'U': /*тут уж гласные сами впишите*/
        i++; break;
 
        default: break;
        }
    }
    printf("\n %d", i/j);
    return i;
 
}
вот так ? но 0 ошибка ноль выводит
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
25.01.2016, 06:40 9
idris97, так ошибка или 0 выводит? ))
на самом деле я немного схитрил: i - целое, j - целое. i/j - что напечатает?
в printf спецификатор %d - целое, а надо %f и переменную надо float (в делфи не так разве?)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2016, 06:40

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Определить, больше в строке гласных или согласных букв
Дана строка. Определить, больше в строке гласных или согласных букв. Код почти разработан, есть...

Подсчитать количество гласных и согласных букв в строке без учета регистра
помогите написать программу на СИ. Пользователь вводит с клавиатуры строку S. Подсчитать...

Найти, каких букв в тексте больше – гласных или согласных
Найти, каких букв в тексте больше – гласных или согласных.

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


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

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

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