0 / 0 / 1
Регистрация: 08.04.2013
Сообщений: 25
1

Посчитать количество различных символов в тексте

29.05.2013, 21:20. Показов 5106. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите написать программу, должна работать так: программа открывает текстовый файл, в котором есть какой либо текст и считает количество различных символов в нем, должна вывести:
a=
b=
c=
и тд.
P.S. если символа в тексте нету, то выводить сообщение, что, к примеру m=0 не нужно

Добавлено через 16 минут
ребят, кто знает как сделать, не игнорьте пожалуйста, очень нужна эта программа
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2013, 21:20
Ответы с готовыми решениями:

Количество различных символов в тексте
Пожалуйста, если не сложно, нужен алгоритм с объяснением!! Заранее спасибо)) Определить сколько...

Провести частотный анализ текста: посчитать, сколько различных символов встречается в данном тексте
4.19. Файл содержит информацию в виде символьных строк произвольной длины. Провести частотный...

Посчитать количество различных символов
Текст задачи выглядит так: Дана строка. Подсчитать, сколько различных символов встречаются в ней...

Подсчитать количество различных символов в тексте
В последовательности символов, заканчивающейся *, подсчитать количество цифр, прописных и строчных...

17
8 / 8 / 9
Регистрация: 10.05.2013
Сообщений: 26
29.05.2013, 21:26 2
Ну если в файле только строчные латинские буквы, то это должно работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<fstream>
 
using namespace std;
 
void main () {
    ifstream in("in.txt");
    int result[26]={0};
    while (in.peek()!=EOF) {
        result[in.get()-'a']++;
    }
    in.close();
    ofstream out("out.txt");
    char a='a';
    for (int i = 0; i < 26; i++,a++) {
        if (result[i]==0) {
            continue;
        }
        out<<a<<"="<<result[i]<<endl;
    }
    out.close();
}
0
0 / 0 / 1
Регистрация: 08.04.2013
Сообщений: 25
29.05.2013, 21:43  [ТС] 3
Цитата Сообщение от Lvaruky Посмотреть сообщение
Ну если в файле только строчные латинские буквы, то это должно работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<fstream>
 
using namespace std;
 
void main () {
    ifstream in("in.txt");
    int result[26]={0};
    while (in.peek()!=EOF) {
        result[in.get()-'a']++;
    }
    in.close();
    ofstream out("out.txt");
    char a='a';
    for (int i = 0; i < 26; i++,a++) {
        if (result[i]==0) {
            continue;
        }
        out<<a<<"="<<result[i]<<endl;
    }
    out.close();
}
нужно чтобы в файле проверялись все символы, т.е. и заглавные и строчные, и запятые, и пробелы и тд. там наверное как то с таблицей ascii связать это надо...
0
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
29.05.2013, 21:45 4
Цитата Сообщение от Lilechka Посмотреть сообщение
там наверное как то с таблицей ascii связать это надо...
Как это проницательно Лилия, продолжайте.
1
0 / 0 / 1
Регистрация: 08.04.2013
Сообщений: 25
29.05.2013, 21:46  [ТС] 5
Цитата Сообщение от Lilechka Посмотреть сообщение
Помогите написать программу, должна работать так: программа открывает текстовый файл, в котором есть какой либо текст и считает количество различных символов в нем, должна вывести:
a=
b=
c=
и тд.
P.S. если символа в тексте нету, то выводить сообщение, что, к примеру m=0 не нужно

Добавлено через 16 минут
ребят, кто знает как сделать, не игнорьте пожалуйста, очень нужна эта программа
чуть не забыла, надо еще чтобы в конце вывелось общее количество различных символов, т.е. если бы в исходном файле текст был такой: "soobshenie", то вывелось бы "Количество различных символов=7"
0
8 / 8 / 9
Регистрация: 10.05.2013
Сообщений: 26
29.05.2013, 21:47 6
Проблема в том, что между заглавными и строчными буквами в таблице есть другие символы. В условии задачи точно не обговоремно, какие буквы и какие знаки препинания?
0
0 / 0 / 1
Регистрация: 08.04.2013
Сообщений: 25
29.05.2013, 21:49  [ТС] 7
Цитата Сообщение от Пaтрик Посмотреть сообщение
Как это проницательно Лилия, продолжайте.
если не знаешь, то отвечать вовсе необязательно

Добавлено через 1 минуту
Цитата Сообщение от Lvaruky Посмотреть сообщение
Проблема в том, что между заглавными и строчными буквами в таблице есть другие символы. В условии задачи точно не обговоремно, какие буквы и какие знаки препинания?
к сожалению, не оговорено... в исходнике может быть текст из любых символов
но буквы могут быть только латинские
0
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
29.05.2013, 21:55 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <map>
 
int main()
{
    std::map<char, int> map;
    std::ifstream input("f.txt");
    while (!input.eof())
        if (input.peek() != EOF)
            map[input.get()]++;
    
    input.close();
    for (auto pair : map)
        std::cout << pair.first << '=' << pair.second << std::endl;
    std::cout << "Total count: " << map.size() << std::endl;
    return 0;
}
1
0 / 0 / 1
Регистрация: 08.04.2013
Сообщений: 25
29.05.2013, 22:05  [ТС] 9
Цитата Сообщение от Пaтрик Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <map>
 
int main()
{
    std::map<char, int> map;
    std::ifstream input("f.txt");
    while (!input.eof())
        if (input.peek() != EOF)
            map[input.get()]++;
    
    input.close();
    for (auto pair : map)
        std::cout << pair.first << '=' << pair.second << std::endl;
    std::cout << "Total count: " << map.size() << std::endl;
    return 0;
}
у тебя Total count выдает на 1 символ больше, чем есть

Добавлено через 2 минуты
Цитата Сообщение от Lilechka Посмотреть сообщение
у тебя Total count выдает на 1 символ больше, чем есть
ой он же с пробелом считает... значит все нормально работает, спасибо))
0
Мой лучший друг-отладчик!
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
29.05.2013, 22:06 10
Пaтрик,я тоже такое решение придумал, но только через set()
0
0 / 0 / 1
Регистрация: 08.04.2013
Сообщений: 25
30.05.2013, 14:42  [ТС] 11
Цитата Сообщение от Пaтрик Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <map>
 
int main()
{
    std::map<char, int> map;
    std::ifstream input("f.txt");
    while (!input.eof())
        if (input.peek() != EOF)
            map[input.get()]++;
    
    input.close();
    for (auto pair : map)
        std::cout << pair.first << '=' << pair.second << std::endl;
    std::cout << "Total count: " << map.size() << std::endl;
    return 0;
}
а можете переделать эту программу, чтобы в ней не использовалось это auto, препод сказал, что это что то новое и что он сам еще этим не пользовался... и нужно чтобы программа могла запуститься в microsoft visual 2010, а ваша программа только в 2012 запускается
0
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
31.05.2013, 11:07 12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <map>
 
int main()
{
    std::map<char, int> map;
    std::ifstream input("f.txt");
    while (!input.eof())
        if (input.peek() != EOF)
            map[input.get()]++;
    
    input.close();
    for (std::map<char, int>::iterator it = map.begin(); it != map.end(); it++)
        std::cout << it->first << '=' << it->second << std::endl;
    std::cout << "Total count: " << map.size() << std::endl;
    return 0;
}
2
DiffEreD
31.05.2013, 11:20
  #13

Не по теме:

Цитата Сообщение от Lilechka Посмотреть сообщение
и что он сам еще этим не пользовался
афигенный препод...

1
Мой лучший друг-отладчик!
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
31.05.2013, 15:40 14
вот код через set:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
#include <set>
 
int main()
{
    char let;
    std::set<char>all_let;
    std::ifstream input("f.txt");
    while (!input.eof())
    {
        input>>let;
        all_let.insert(let);
    }
    input.close();
    std::cout << "Total count: " << all_let.size() << std::endl;
    system("pause");
    return 0;
}
1
0 / 0 / 1
Регистрация: 08.04.2013
Сообщений: 25
31.05.2013, 19:44  [ТС] 15
Цитата Сообщение от Пaтрик Посмотреть сообщение
while (!input.eof())
* * * * if (input.peek() != EOF)
* * * * * * map[input.get()]++;
input.close();
* * for (std::map<char, int>::iterator it = map.begin(); it != map.end(); it++)
* * * * std::cout << it->first << '=' << it->second << std::endl;
можете, пожалуйста, закомментировать эти строчки?
0
8 / 8 / 9
Регистрация: 10.05.2013
Сообщений: 26
31.05.2013, 19:59 16
C++
1
2
3
4
5
6
while (!input.eof()) //пока не конец файла, цикл
    if (input.peek() != EOF) //если следующий символ во входном потоке не равен концу файла
        map[input.get()]++; //плюсуем соответсвующий счетчик
input.close(); //закрываем входной поток
    for (std::map<char, int>::iterator it = map.begin(); it != map.end(); it++) /*итератор типа map<char,int> (то есть указатель) инициализируем адресом первого элемента. Пока итератор не равен адресу последнего элемента, итератор++ */
        std::cout << it->first << '=' << it->second << std::endl; /* конструкция it->first равносильна *(it).first, то есть мы берем указатель, разыменовываем его и обращаемся к элементу first структуры */
Вроде так.
Пaтрик, можете расказать, что это за конструкция: for (auto pair : map)? Ну или хотя бы намекнуть, чтобы я нашел информацию.
0
Мой лучший друг-отладчик!
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
31.05.2013, 20:24 17
Lvaruky, auto автоматически выводит тип переменной, а конструкция эта называется вроде "for на диапазоне".Была введена в С++ 11.
1
8 / 8 / 9
Регистрация: 10.05.2013
Сообщений: 26
31.05.2013, 20:33 18
ZaMaZaN4iK, спасибо, понял.
0
31.05.2013, 20:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2013, 20:33
Помогаю со студенческими работами здесь

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

Посчитать количество символов «е» в тексте.
Написать программу для решения задачи на Паскале. Дана строка, содержащая текст на русском языке:...

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

Как посчитать количество символов в тексте?
&lt;p id=&quot;text&quot;&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vel minima libero pariatur...


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

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

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