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

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

15.03.2015, 12:24. Показов 5426. Ответов 11
Метки нет (Все метки)

Помогите создать программу подсчета количества различных символов в строке.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2015, 12:24
Ответы с готовыми решениями:

Подсчет количества символов в строке
Помогите, пожалуйста, разобраться. Строка (тип данных string) вводится с клавиатуры. Задача:...

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

Подсчет количества символов в строке
программа должна считать кол-во символов в строке но выдает 0 #include "stdafx.h" #include...

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

11
Модератор
Эксперт С++
12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
15.03.2015, 12:38 2
Простейший способ - использовать контейнер map
Количество различных символов в тексте

А вот пример через контейнер set
Подсчитать количество различных символов, которые не являются буквами или цифрами, и вывести их на экран
Посчитать количество различных символов в тексте

А вот просто через массивы
Количество различных букв в слове
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
15.03.2015, 12:43 3
_katerina_, Извольте:
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
#include <iostream>
#include <string>
#include <vector>
 
std::vector<size_t> CountSymbolsAppearing(const std::string &text) {
  std::vector<size_t> symbols_appearing(256, 0);
  for (auto symbol : text) {
    ++symbols_appearing[symbol];
  }
  return symbols_appearing;
}
 
char SymbolFromIndex(size_t symbol_index) {
  return static_cast<char>(symbol_index);
}
 
void ShowSymbolAppearingInfo(char symbol, size_t number_of_appears) {
  if (number_of_appears != 0) {
    std::cout << "[" << symbol << " ] = " << number_of_appears << '\n';
  }
}
 
void ShowText(const std::string &text) {
  std::cout << "text: " << text << '\n';
}
 
void ShowSymbolsAppearing(const std::vector<size_t> &symbols_appearing) {
  for (size_t symbol_index = 0; symbol_index < symbols_appearing.size();
       ++symbol_index) {
    ShowSymbolAppearingInfo(SymbolFromIndex(symbol_index),
                            symbols_appearing.at(symbol_index));
  }
}
 
int main() {
  std::string text = "this is test string";
  ShowText(text);
  ShowSymbolsAppearing(CountSymbolsAppearing(text));
}
Пруф работоспособности:
http://ideone.com/rdMiSn
0
0 / 0 / 0
Регистрация: 28.02.2015
Сообщений: 20
15.03.2015, 12:55  [ТС] 4
Мы так сложно не пишем.Программу нужно составить по простейшей блок схеме

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string.h>
#include<iostream>
using namespace std;
 int main()
{
    char s[20]="";
    cin>>s;
    int k=0, n;
  int  l=strlen(s);
    for(int i=0; i<l-1; i++){
        n=0;
        for(int j=0; j<l-1; j++)
            if(s[i]==s[j])n=n+1;
         k=k+1/n;
        }
  cout<<k;
    
    return 0;
}
вот, я пыталась,но результат неправильный.Можете помочь решить,но так же
0
0 / 0 / 0
Регистрация: 28.02.2015
Сообщений: 20
15.03.2015, 13:50  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string.h>
#include<iostream>
using namespace std;
int main()
{
char s[20]="";
cin>>s;
int k=0, n;
int l=strlen(s);
for(int i=0; i<l-1; i++){
n=0;
for(int j=0; j<l-1; j++)
if(s[i]==s[j])n=n+1;
k=k+1/n;
}
cout<<k;
 
return 0;
}
Помогите изменить, но сильно не меняя,т.к. мы сложные конструкции не изучали
0
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,163
15.03.2015, 14:05 6
Цитата Сообщение от _katerina_ Посмотреть сообщение
Помогите изменить, но сильно не меняя,т.к. мы сложные конструкции не изучали
std::string уже учили?

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <set>
#include <cstring>
 
int main() 
{
    char s[256];
    std::cin>>s;
    std::set<char> first(s, s+strlen(s)); 
    std::cout << first.size() <<std::endl;
    return 0;
}
0
0 / 0 / 0
Регистрация: 28.02.2015
Сообщений: 20
15.03.2015, 14:15  [ТС] 7
Нет,прошу, усовершенствуйт именно ту программу,которую я кинула
0
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,163
15.03.2015, 14:23 8
_katerina_, вы на правильном пути,заведите новый массив и все уникальные символы сбрасывайте туда.
0
0 / 0 / 0
Регистрация: 28.02.2015
Сообщений: 20
15.03.2015, 14:25  [ТС] 9
ну помогите.Кааак!?
0
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,163
15.03.2015, 14:37 10
Цитата Сообщение от _katerina_ Посмотреть сообщение
ну помогите.Кааак!?
Я уже помогаю.Конкретизируйте вопрос.
0
0 / 0 / 0
Регистрация: 28.02.2015
Сообщений: 20
15.03.2015, 14:41  [ТС] 11
Напишите программу, пожалуйста. Но на основе той, которую уже создала я
0
Комп_Оратор)
Эксперт по математике/физике
8771 / 4510 / 608
Регистрация: 04.12.2011
Сообщений: 13,454
Записей в блоге: 16
15.03.2015, 16:01 12
Цитата Сообщение от _katerina_ Посмотреть сообщение
Нет,прошу, усовершенствуйт именно ту программу,которую я кинула
Это сложно сказать усовершенствовал ли я Ваш код или не усовершенствовал не Ваш, но для разнообразия:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include<iostream>
using namespace std;
const int alphaBetEnglSize=26;
enum symbolsIndexes:int 
{space, point, coma, ask,
exclamation, apostrophe, lparens, rparens,
startNumber, startSmallAlpha=startNumber+10, startBigAlpha=startSmallAlpha+alphaBetEnglSize};
 
const int symbArrSize = startNumber + 10 + 2*alphaBetEnglSize;
int frequenSymbols[symbArrSize]={0};
 
int getIndexBySymbol(char ch)
{
int ind=0;
switch(ch)
{
case ' ': ind = space; break;
case '.': ind = point; break;
case ',': ind = coma; break;
case '?': ind = ask; break;
case '!': ind = exclamation; break;
case '\'': ind = apostrophe; break;
case '(': ind = lparens; break;
case ')': ind = rparens; break;
default :ind = 0;
}
if(ch>='0' && ch <='9')ind= startNumber+ch-'0';
if(ch>='a' && ch <='z')ind= startSmallAlpha+ch-'a';
if(ch>='A' && ch <='Z')ind= startBigAlpha+ch-'A';
return ind;
}
 
char getSymbolByIndex(int ind)
{
char ch=0;
switch(ind)
{
case space: ch = ' '; break;
case point: ch = '.'; break;
case coma: ch = ','; break;
case ask: ch = '?'; break;
case exclamation:ch = '!';; break;
case apostrophe: ch = '\''; break;
case lparens: ch = '('; break;
case rparens: ch = ')'; break;
}
if(ind>=startNumber && ind <=startNumber+10)ch= ind- startNumber+'0';
if(ind>=startSmallAlpha && ind <=startSmallAlpha+alphaBetEnglSize)ch= ind-startSmallAlpha+'a';
if(ind>=startBigAlpha && ind <=startBigAlpha+alphaBetEnglSize)ch=ind-startBigAlpha+'A';
return ch;
}
 
char *symbolNames[]=
{"space", "point", "coma", "ask", "exclamation", "apostrophe", "lparens",
"rparens","number", "alpha"};
 
char *getSymbolNameByIndex(int ind)
{
switch(ind)
{
case space:return symbolNames[space];
case point:return symbolNames[point];
case coma:return symbolNames[coma];
case ask:return symbolNames[ask];
case exclamation:return symbolNames[exclamation];
case apostrophe:return symbolNames[apostrophe];
case lparens:return symbolNames[lparens];
case rparens:return symbolNames[rparens];
}
 
if(ind>startNumber-1 && ind <10+ startNumber)return symbolNames[rparens+1];
if(ind>startSmallAlpha-1 && ind <alphaBetEnglSize+startSmallAlpha)return symbolNames[rparens+2];
if(ind>startBigAlpha-1 && ind <alphaBetEnglSize+startBigAlpha)return symbolNames[rparens+2];
 
return 0;
}
 
int main()
{
const char *someString = "A very, very strenge string, isn't it?! 123abc (c)";
cout<<"source string is :"<<someString<<endl;
int sz= strlen(someString);
 
for(int i = 0; i < sz; ++i)
{
frequenSymbols[getIndexBySymbol(someString[i])]++;
}
cout<<"The frequency symbols :"<<endl;
for(int i = 0; i < symbArrSize; ++i)
{
if(frequenSymbols[i])cout<<getSymbolNameByIndex(i)<<": "<<"looks like "<<getSymbolByIndex(i)<<" end was met "<<frequenSymbols[i]<<" times\n";
}
system("pause");
return 0;
}
Разнообразных же... Опять прочёл вверх тормашками. Тогда так тоже можно, но избыточно. Разнообразные это те, что единожды встретились. Впрочем, думаю это уже не актуально. Можно удалить.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2015, 16:01
Помогаю со студенческими работами здесь

Подсчет количества символов пунктуации в строке
помогите плз 1.написать программу которая подсчитывает количество символов пунктуации в строке...

Подсчет количества разных символов в строке
Как считать разные символы в строке?Есть код на кол-во,но не понимаю как именно разные...

Подсчёт количества символов в строке (cin.getline)
Здравствуйте! Задача такова: нужно подсчитать количество символов 'a' в строке. Помогите,...

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


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

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

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