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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Lilechka
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 25
29.05.2013, 21:20     Посчитать количество различных символов в тексте #1
Помогите написать программу, должна работать так: программа открывает текстовый файл, в котором есть какой либо текст и считает количество различных символов в нем, должна вывести:
a=
b=
c=
и тд.
P.S. если символа в тексте нету, то выводить сообщение, что, к примеру m=0 не нужно

Добавлено через 16 минут
ребят, кто знает как сделать, не игнорьте пожалуйста, очень нужна эта программа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lvaruky
8 / 8 / 0
Регистрация: 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();
}
Lilechka
0 / 0 / 0
Регистрация: 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 связать это надо...
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
29.05.2013, 21:45     Посчитать количество различных символов в тексте #4
Цитата Сообщение от Lilechka Посмотреть сообщение
там наверное как то с таблицей ascii связать это надо...
Как это проницательно Лилия, продолжайте.
Lilechka
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 25
29.05.2013, 21:46  [ТС]     Посчитать количество различных символов в тексте #5
Цитата Сообщение от Lilechka Посмотреть сообщение
Помогите написать программу, должна работать так: программа открывает текстовый файл, в котором есть какой либо текст и считает количество различных символов в нем, должна вывести:
a=
b=
c=
и тд.
P.S. если символа в тексте нету, то выводить сообщение, что, к примеру m=0 не нужно

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

Добавлено через 1 минуту
Цитата Сообщение от Lvaruky Посмотреть сообщение
Проблема в том, что между заглавными и строчными буквами в таблице есть другие символы. В условии задачи точно не обговоремно, какие буквы и какие знаки препинания?
к сожалению, не оговорено... в исходнике может быть текст из любых символов
но буквы могут быть только латинские
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
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;
}
Lilechka
0 / 0 / 0
Регистрация: 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 символ больше, чем есть
ой он же с пробелом считает... значит все нормально работает, спасибо))
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
29.05.2013, 22:06     Посчитать количество различных символов в тексте #10
Пaтрик,я тоже такое решение придумал, но только через set()
Lilechka
0 / 0 / 0
Регистрация: 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 запускается
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
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;
}
DiffEreD
31.05.2013, 11:20
  #13

Не по теме:

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

ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
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;
}
Lilechka
0 / 0 / 0
Регистрация: 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;
можете, пожалуйста, закомментировать эти строчки?
Lvaruky
8 / 8 / 0
Регистрация: 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)? Ну или хотя бы намекнуть, чтобы я нашел информацию.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
31.05.2013, 20:24     Посчитать количество различных символов в тексте #17
Lvaruky, auto автоматически выводит тип переменной, а конструкция эта называется вроде "for на диапазоне".Была введена в С++ 11.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2013, 20:33     Посчитать количество различных символов в тексте
Еще ссылки по теме:

Посчитать количество различных элементов массива C++
Количество различных символов в тексте C++
C++ Вводится последовательность символов. Признак конца ввода – точка. Посчитать количество символов не являющихся пробелами

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

Или воспользуйтесь поиском по форуму:
Lvaruky
8 / 8 / 0
Регистрация: 10.05.2013
Сообщений: 26
31.05.2013, 20:33     Посчитать количество различных символов в тексте #18
ZaMaZaN4iK, спасибо, понял.
Yandex
Объявления
31.05.2013, 20:33     Посчитать количество различных символов в тексте
Ответ Создать тему
Опции темы

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