Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
1

Как преобразовать код для n-ого количества строк?

09.07.2014, 12:06. Показов 974. Ответов 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
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
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "RUS");
    int i, j, n, len = 0, m, p = 0, y;
 
    char text[1000] = { 0 };
    char find[1000] = { 0 };
    char *sub = NULL;
    cout << "Введите кол-во строк:";
    cin >> m;
    j = 0;
    for (y = 0; y <= m; y++)
    {
        cin.getline(text, 999);
        len = strlen(text);
        p += len;
 
        for (i = 0; text[i] != '\0'; i++)
        {
            if (!strchr(find, text[i]))
            {
                find[j] = text[i];
                j = j + 1;
            }
        }
 
 
        for (n = j = 0; find[j] != '\0'; j++)
        {
            if (sub = strchr(text, find[j]))
            {
                cout << "Символ:" << find[j] << " ";
                for (n = 1; sub != NULL; n++)
                {
                    if (sub + 1)
                        sub = strchr(sub + 1, find[j]);
                }
                cout << "Встречается раз:" << (n - 1) << " "
                    << "Его частота в строке:" << (100.0*(n - 1)) / p << "%" << endl;
            }
        }p = 0;
    }
    cout << "Общее количество элементов:" << p;
 
    system("pause");
    return 0;
}
0

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

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2014, 12:06
Ответы с готовыми решениями:

Для заданных чисел: если разность 2-ого и 3-ого числа равна 5, то найти сумму 1-ого и 4-ого числа
Ввести 4 числа . Если разность 2 и 3 числа равна 5 ,то найти сумму 1 и 4 числа

Перенести числа из конца 1-ого массива в конец 2-ого до тех пор, пока сумма 2-ого массива не превысит сумму 1-ого...
Ребят, помогите пожалуйста Заполнить два массива случайными числами. Если сумма всех элементов...

Подскажите как преобразовать код для сайта для HTML
Необходимо установить в Яндекс-метрике цель JavaScript для отслеживания заполнения форм заказов,...

Код склеивания строк, нужно поправить код соединения строк с запятыми для Excel
Есть красивый код но в нем учитывается и пустые строки для соединения и получается не красиво...

8
357 / 316 / 216
Регистрация: 21.02.2013
Сообщений: 744
09.07.2014, 15:16 2
Лучший ответ Сообщение было отмечено Glebordan как решение

Решение

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
#include <iostream>
#include <string.h>
#include <stdio.h>
 
#include <stdlib.h>
using namespace std;
 
int main()
{
 
    int i, j, n, len = 0, m, p = 0, y;
 
 
    char find[1000] = { 0 };
    char *sub = NULL;
    cout << "Vvedite kolichestvo strok:";
    cin >> m;
    char text[m][1000] ;
    j = 0;
    for (y = 0; y <= m; y++)
    {
        cin.getline(text[y], 999);
        len = strlen(text[y]);
        p += len;
 
        for (i = 0; text[y][i] != '\0'; i++)
        {
            if (!strchr(find, text[y][i]))
            {
                find[j] = text[y][i];
                j = j + 1;
            }
        }
    }
bool flag;
 
       for (j = 0; find[j] != '\0'; j++)
        {
            flag = false;
            n = 0;
            for (y = 0; y <= m; y++)
            {
                if ((sub = strchr(text[y], find[j])))
                {
                   flag = true;
                    while(sub != NULL)
                    {
                        n++;
                        sub = strchr(sub + 1, find[j]);
                    }
 
 
                }
            }
            if (flag)
            {
 
                cout << "Simvol:" << find[j] << " ";
                cout << "Vstrechaetsa:" << (n ) << " "
                    << "Ego chastota v stroke:" << (100.0*(n )) / p << "%" << endl;
            }
        }
 
    cout << "obwee kolichestvo simvolov : " << p;
 
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
09.07.2014, 16:27  [ТС] 3
Это конечно приятно, но так и я могу. Ты ведь просто приписал строковый индекс к массиву и подредактировал потом немного, но проблемы ты этим не решил
0
357 / 316 / 216
Регистрация: 21.02.2013
Сообщений: 744
09.07.2014, 16:35 4
как не решил?!
Цитата Сообщение от Glebordan Посмотреть сообщение
сделать так чтобы частоты символом считались для всего текста, а не для строки отдельно
ну программа считает частоты символов для всего текста?
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
09.07.2014, 16:40  [ТС] 5
Ты ведь создаёшь динамический массив, там нужно освобождать память. Просто если ты хотел на это намекнуть, то спасибо

Добавлено через 1 минуту
Чувак ты молодец, прости что бочку на тебя катил... там надо было чуть-чуть подправить
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
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
using namespace std;
 
int main()
{
 
    int i, j, n, len = 0, m, p = 0, y;
 
 
    char find[1000] = { 0 };
    char *sub = NULL;
    cout << "Vvedite kolichestvo strok:";
    cin >> m;
    char text[10][1000];
    j = 0;
    for (y = 0; y <= m; y++)
    {
        cin.getline(text[y], 999);
        len = strlen(text[y]);
        p += len;
 
        for (i = 0; text[y][i] != '\0'; i++)
        {
            if (!strchr(find, text[y][i]))
            {
                find[j] = text[y][i];
                j = j + 1;
            }
        }
    }
    bool flag;
 
    for (j = 0; find[j] != '\0'; j++)
    {
        flag = false;
        n = 0;
        for (y = 0; y <= m; y++)
        {
            if ((sub = strchr(text[y], find[j])))
            {
                flag = true;
                while (sub != NULL)
                {
                    n++;
                    sub = strchr(sub + 1, find[j]);
                }
 
 
            }
        }
        if (flag)
        {
 
            cout << "Simvol:" << find[j] << " ";
            cout << "Vstrechaetsa:" << (n) << " "
                << "Ego chastota v stroke:" << (100.0*(n)) / p << "%" << endl;
        }
    }
 
    cout << "obwee kolichestvo simvolov : " << p;
 
    system("pause");
    return 0;
}
0
357 / 316 / 216
Регистрация: 21.02.2013
Сообщений: 744
09.07.2014, 16:45 6
ты опять неправильно понял
C++
1
2
cout << "Vvedite kolichestvo strok:";
    cin >> m;
здесь ты задаешь размер массива
то есть сколько строк у тебя будет в тексте
если не знаешь скока строк то лучше std::vector вместо массива использовать
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
09.07.2014, 16:48  [ТС] 7
Да ну... просто компилятор мне говорит, что надо освобождать память Да и я на сколько помню лекции и практики это динамический массив и для него надо место освободить Т.к. компилятор заранее не знат сколько места надо под массив Если я что путаю то поправь меня
0
Эксперт PHP
3007 / 2523 / 1186
Регистрация: 14.05.2014
Сообщений: 7,100
Записей в блоге: 1
09.07.2014, 17:04 8
Glebordan, если поможет
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
#include <iostream>
#include <windows.h>
#include <cstring>
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int symbol[256] = {0};
    char text[1000];
    int count = 0, n;
    std::cout << "Введите количество строк: ";
    std::cin >> n;
    std::cin.ignore();
    for (int i = 0; i < n; i++)
    {
        std::cin.getline(text, 999);
        for (int j = 0; j < strlen(text); j++)
            symbol[(unsigned char)text[j]]++;
    }
    for (int i = 0; i < 256; i++)
    {
        if (symbol[i] != 0)
            std::cout << "Символ '" << (unsigned char)i << "' встречается в тексте " << symbol[i] << " раз" << std::endl; 
    }
    
    return 0;
}
2
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 37
09.07.2014, 17:12  [ТС] 9
Нет, больше не надо, предыдущий вариант работает, если ввести констану Но и за твой ответ спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2014, 17:12

Вывести на экран значения 0-ого, 3-ого и 13-ого битов числа n в формате short int
Задано число n в формате short int. Вывести на экран значения 0-ого, 3-ого и 13-ого битов...

Алгоритм и структура для поиска большого количества строк в другом массиве строк
Здравствуйте! Я решаю следующую задачу: Есть файл со &quot;строками&quot; (средняя длина которых 40-50...

Создание n- ого количества textbox
Есть у меня на форме элемент NumericUpDown. Как мне сделать, чтобы при вводе некоторого числа (от 1...

Преобразовать код на Java в код для ассемблера 3AA
переделать Java программу в программу 3AA все данные типа int for(int i = 0; i &lt; 10; ++i) {...


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

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

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