Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Lilechka
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 25
#1

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

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

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

Добавлено через 16 минут
ребят, кто знает как сделать, не игнорьте пожалуйста, очень нужна эта программа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 21:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Посчитать количество различных символов в тексте (C++):

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

Посчитать количество знаков препинания в тексте и вывести их количество. - C++
Текст:"Враг, что мудр и много знает, друга может быть ценней. Мудрость уважать пристало у врагов и у друзей."

Посчитать количество различных значений в массиве - C++
Дан одномерный массив A. Посчитать количество различных значений в этом массиве.

Посчитать количество различных элементов массива - C++
Собственно задача обозначена в заглавии темы. НЕ могу понять что неправильно в моем говнокоде (постоянно вывадит 100). Подскажите пожалста...

Посчитать количество различных элементов в массиве - C++
Дан линейный массив целых чисел ввести с клавиатуры не менее 10 элементов и посчитать сколько в нем различных чисел . помогите решить ...

Вводится последовательность символов. Признак конца ввода – точка. Посчитать количество символов не являющихся пробелами - C++
Порядок выполнения работы 1.Изучите теоретическое обоснование и проанализируйте приведенные выше примеры программ с циклами типа for,...

17
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();
}
0
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 связать это надо...
0
Пaтрик
416 / 391 / 39
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
29.05.2013, 21:45 #4
Цитата Сообщение от Lilechka Посмотреть сообщение
там наверное как то с таблицей ascii связать это надо...
Как это проницательно Лилия, продолжайте.
1
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"
0
Lvaruky
8 / 8 / 0
Регистрация: 10.05.2013
Сообщений: 26
29.05.2013, 21:47 #6
Проблема в том, что между заглавными и строчными буквами в таблице есть другие символы. В условии задачи точно не обговоремно, какие буквы и какие знаки препинания?
0
Lilechka
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 25
29.05.2013, 21:49  [ТС] #7
Цитата Сообщение от Пaтрик Посмотреть сообщение
Как это проницательно Лилия, продолжайте.
если не знаешь, то отвечать вовсе необязательно

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

Не по теме:

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

1
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 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;
}
1
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;
можете, пожалуйста, закомментировать эти строчки?
0
31.05.2013, 19:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2013, 19:44
Привет! Вот еще темы с ответами:

Посчитать количество пробелов в тексте - C++
Помогите c задачей вот написал код,а он из за строки cout&lt;&lt;k&lt;&lt;endl; выкидывает ошибку #include &quot;stdafx.h&quot; #include&lt;iostream&gt; ...

Посчитать в тексте количество удвоенных букв n - C++
Посчитать в тексте количество удвоенных букв n. (текст ввести с клавиатуры)

Посчитать количество предложений в данном тексте - C++
Помогите!!!!!!! Дан текст. Посчитать количество предложений в нем. Содержит данный текст восклицательные предложения ? ...

Посчитать количество букв в заданном тексте - C++
vector&lt;int&gt; alph(123, 0); for (int j = i; j &lt; str5.size(); j += size) { arrstr += str5; alph)] ++; } for (int t = 97;...


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

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

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