Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 39
1

Определить частотность символов текста

14.05.2016, 15:37. Показов 3553. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Само задание: Дан файл F, контентом которого является текст. Определить частотность всех символов текста.

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
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    ifstream ifs("F.txt");
    char ch;
    string str;
    vector <char> vec;
    int kol_sim = 0;
    vector <int> kol;
    int temp;
    for (; ifs;)
    {
        ifs.get(ch);
        if (ifs.eof()) break;
        vec.push_back(ch);
    }
    sort(vec.begin(), vec.end());
    for (int i = 0; i < vec.size(); i++)
    {
        cout << vec[i] << " " ;
    }
    cout << endl;
    int temp2 = 0;
    for (int i = 1; i < vec.size(); i++)
    {
        if (vec[i] != vec[i-1])
        {
            temp = i;
            kol.push_back(temp);
            kol_sim++;
            cout << vec[i] << " ";
        }
    }
    cout << endl;
    for (int i = kol.size() - 1; i != 0; i--)
    {
        kol[i] = kol[i] - kol[i-1];
    }
    cout << endl;
    for (int i = 0; i < kol.size() - 1; i++)
    {
        cout << kol[i] << " " ;
    }
}
Остановился на том месте, что не могу вывести правильное количество символов. На единицу меньше получается. Либо первый символ в пролете, либо последний. Пытался менять границы if, но никак не получается..
Это во-первых. А потом.... По этой же причине размерности векторов kol и vec не совпадают, хотя в общем они показывают правильные значения. vector <char> vec показывает сами символы, а vector<int> kol - количество этих символов. По замыслу я сначала сортирую весь вектор, потом сравниваю 1ый элемент со вторым, и если они не совпадают, тогда увеличиваю счетчик. Тем самым я узнаю сколько разных элементов.

входной файл:
raz dva trichetirepyat
результат:
aaacdeehiiprrrtttvyz
acdehiprtvyz

2 3 1 1 2 1 2 1 3 3 1
Т.е. 2 пробела, 3 буквы a, 1 буква c, 1 буква d....., 3 буквы t, 1 буква v, а вот y и z в пролете..
Если получится исправить размерность векторов, задача практически будет решена.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2016, 15:37
Ответы с готовыми решениями:

Определить сколько различных символов в каждом слове введенного с клавиатуры текста
Определить сколько различных символов в каждом слове введенного с клавиатуры текста.

Дана строка текста.Определить сколько в ней символов больше . а или о
как надо решить . я запутался

Определить в каждом предложении текста колличество символов, отличных от букв и пробела
Помогите пожалуйста решить задачу!!! С помощью текстового редактора создать файл, содержащий...

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

22
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
14.05.2016, 23:39 21
Author24 — интернет-сервис помощи студентам
тут важно понимать, что все эти строки и столбцы существуют только в голове. память линейна.
для примера. вот есть у нас некий указатель
C++
1
int** a;
выделим память
C++
1
a = new int*[M];
теперь а указывает на некий массив из M указателей типа int*.
потом выделим память для каждого указателя из массива а
C++
1
2
for(int i = 0; i < M; ++i)
    a[i] = new int[N];
теперь каждый указатель [I]a из массива, на который указывает а, указывает на массив из N чисел типа int.
и вот тут, как воспринимать каждый массив, на который указывает [I]a, как строку или столбец,- дело каждого в зависимости от задачи и потребностей.
зачастую принимают, что а - указывает на массив строк, а каждый из [I]a - на строку. т.е. строка будет состоять из всех [I]a[*], а столбец из всех [I]a[*]. но что нам мешает воспринимать их иначе? т.е. a будем рассматривать как указатель на массив столбцов, а каждый [I]a - указатель на собственно столбец. да, может поменяться, например, порядок обхода, работа с индексами для конкретных алгоритмов, но сути это не меняет.
и вот к вопросу
Цитата Сообщение от chutikmam Посмотреть сообщение
удаления столбца
как мы его воспринимаем?

Не по теме:

ночь на дворе... на философию потянуло:)



Добавлено через 19 минут
не смог в долбаный курсив - все обозначения поломал. вот что ваял:
Цитата Сообщение от retmas Посмотреть сообщение
теперь каждый указатель a[i] из массива, на который указывает а, указывает на массив из N чисел типа int.
и вот тут, как воспринимать каждый массив, на который указывает a[i], как строку или столбец,- дело каждого в зависимости от задачи и потребностей.
зачастую принимают, что а - указывает на массив строк, а каждый из a[i] - на строку. т.е. строка будет состоять из всех a[i][*], а столбец из всех a[*][j]. но что нам мешает воспринимать их иначе? т.е. a будем рассматривать как указатель на массив столбцов, а каждый a[i] - указатель на собственно столбец.
1
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
15.05.2016, 01:35 22
Цитата Сообщение от retmas Посмотреть сообщение
как воспринимать каждый массив, на который указывает [I]a, как строку или столбец,- дело каждого в зависимости от задачи и потребностей.
Тут согласен. Но при удалении любого массива, в массиве указателей будет дырочка. Мы можем подставить вместо дырявого, сплошной массив размером на единицу меньше прежнего, но и прежний терять нельзя. Ведь когда нибудь придётся освобождать память и из под массива указателей.
То есть без пудового бубна удалить что-либо даже из динамического массива динамических массивов трудно.
Проще считать слово "удалить" данью вековому неизбывному злу, которое имеет свойство само воспроизводиться. Преподавателя когда-то научили "удалять" элементы массивов. Потом он понял, что это плохое слово. Но раз он так страдал, то и новые мученики должны понять пагубность такого подхода на собственном примере. Да и куда ему деваться-то? Решит он объявить, что нельзя ничего удалить частично, а только целиком, как тут-же на него остальные накинутся. Не все, а те что злые. Но и этого ему бедолаге хватит. Вот такая вот философия...
Чаще всего, когда рядом со словом массив фигурирует слово "удалить", это значит что речь о указателе на динамическую память, который и считают массивом. Тут имеется ввиду не участок памяти, а именно переменная, которая хранит адрес его начала. При таком подходе, удаление всего старого массива и выделение памяти под новый, можно воспринимать как изменение размеров массива. Тут возможно как удаление, так и приращение размера. Терминологически, это издевательство над здравым смыслом и следовательно идеально подходит для нашего высшего образования.
retmas, это тоже философия (спорная конечно) в борьбе с желанием спать. Я согласен с тем, что Вы написали. Мой пост - альтернатива. Вроде того что: "с другой стороны это может выглядеть вотаквот..."
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
15.05.2016, 02:43 23
Цитата Сообщение от chutikmam Посмотреть сообщение
В 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
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
template <typename T>
int remove_col(T& arr,  const int Num){
    if (Num>=0 && Num <arr.size())
    for(auto& i:arr) i.erase(next(i.begin(), Num));
    else {
            cerr << "Error\n";
            return 0;
    }
    return 1;
}
 
int main ()
{
  vector<vector<int>> arr = {
    {1, 2, 3, 4},
    {4, 5, 6, 7},
    {7, 8, 9, 0},
    {1, 8, 6, 4}
  };
 
  if (remove_col(arr,2)){ //<-- 2 => 3-й столбец (отсчёт от нуля)
  for (auto i:arr){
    for (auto j:i){
        cout << j;
    }   cout << '\n';
  }
  }
}
1
15.05.2016, 02:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2016, 02:43
Помогаю со студенческими работами здесь

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

Строки. Определить минимальное количество первых символов, по которым можно различать слова с заданного текста.
Задача. Определить минимальное количество первых символов, по которым можно различать слова с...

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

Задана строка текста длинной не менее 20 символов. Определить, сколько слов, разделенных пробелами имеется в этой строке текста.
Собственно есть задача: Задана строка текста длинной не менее 20 символов. Определить, сколько...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru