Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
Светланик
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 15
#1

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

14.12.2010, 22:16. Просмотров 3091. Ответов 11
Метки нет (Все метки)

пожалуйста!!! помогите!!! совершенно не знаю как решить это задание
http://www.cyberforum.ru/cpp-beginners/thread1175466.html

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

Дана строка. Подсчитать, сколько различных символов встречается в ней. Вывести их на экран.
Помогите решить задачи: 1. Найти все простые натуральные числа, не...

Подсчитать, сколько раз встречается подстрока в строке
Вводится строка и подстрока. Подсчитать, сколько раз встречается подстрока в...

Подсчитать сколько раз в последовательности символов встречается буква x
Подсчитать сколько раз в последовательности символов встречается буква x.

Подсчитать сколько раз среди символов строки встречается буква x
Дана строка символов, подсчитать сколько раз среди символов строки встречается...

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

11
MILAN
888 / 782 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
14.12.2010, 22:30 #2
Цитата Сообщение от Светланик Посмотреть сообщение
дана строка. подсчитать, сколько различных символов встречается в ней. вывести их на экран
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
int main()
{
    char str[256];
    int cnt=0,cnt1=0;
    printf("Enter string -> ");
    gets(str);
    printf("\nSymbols -> ");
    for(int i=0; i<strlen(str); i++)
    {
        cnt1=0;
        for(int j=0; j<strlen(str); j++)
        {
            if(str[i]==str[j])
            {
                cnt1++;
            }
        }
      if(cnt1 == 1)
      { 
          printf("%c  ",str[i]);
          cnt++;
      }
    }
   printf("\nNumber symbol -> %d",cnt);
   getch();
   return 0;
}
1
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
14.12.2010, 22:38 #3
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
#include <stdio.h>
#include <limits.h>
#include <string.h>
 
int main(void){
    unsigned char buf[BUFSIZ], * p;
    int symbols[UCHAR_MAX + 1], i, cnt;
    
    printf("String: ");
    if ( scanf("%[^\n]", buf) != 1 ){
        fprintf(stderr, "Input error!\n");
        return 1;
    }
    memset(symbols, 0, sizeof(symbols));
    for ( p = buf; *p; ++p )
        symbols[*p]++;
    
    printf("Unique: ");
    cnt = 0;
    for ( i = 0; i < UCHAR_MAX + 1; ++i ){
        if ( symbols[i] ){
            printf("%c", i);
            ++cnt;
        }
    }
    printf("\nTotal: %d symbols.\n", cnt);
    
    return 0;
}
2
Светланик
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 15
14.12.2010, 22:47  [ТС] #4
спасибо Вам огромное!!!! а вы не могли бы еще коментарии написать? была бы очень благодарна!!!
0
MILAN
888 / 782 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
14.12.2010, 23:04 #5
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
int main()
{
        char str[256]; // оглашение массива символов(строки)
        int cnt=0,cnt1=0; // два счетчика
        printf("Enter string -> "); // запрос на ввод строки
        gets(str); // ввод строки
        printf("\nSymbols -> ");
        for(int i=0; i<strlen(str); i++) 
        {
                cnt1=0; // сброс счетчика
                for(int j=0; j<strlen(str); j++)
                {
                        if(str[i]==str[j]) // если i-тый символ строки ровняется   j-тому
                        {
                                cnt1++; // увеличиваем счетчик на 1
                        }
                }
      if(cnt1 == 1) // если в строке символ встретился всего один раз
          { 
                  printf("%c  ",str[i]); // выводим его 
                  cnt++; // увеличеваем счетчик различных символов
          }
        }
   printf("\nNumber symbol -> %d",cnt); // выводим количество различных символов
   getch();
   return 0;
}
2
Светланик
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 15
14.12.2010, 23:14  [ТС] #6
спасибо! спасибо! спасибо!!!!
будьте так добры, напишите пожалуйста и на паскале!!!
0
MILAN
888 / 782 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
14.12.2010, 23:24 #7
Цитата Сообщение от Светланик Посмотреть сообщение
напишите пожалуйста и на паскале!!!
Ето иже пишыте в соответствующий раздел!!!
1
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
14.12.2010, 23:24 #8
MILAN, и всё бы ничего, только, я так понял, нужно все символы, которые в строке встретились, по одному каждый, а не те, которые в строке только один раз встречаются...
1
Светланик
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 15
14.12.2010, 23:52  [ТС] #9
да!да! я так поняла, что нужно подсчитать не только количество одиночных символов

Добавлено через 9 минут
я вот что еще не поняла:
if(str[i]==str[j]) // если i-тый символ строки ровняется j-тому


мы же проверяем не равен ли i-ый символ строки j-му, а не наоборот
0
MILAN
888 / 782 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
14.12.2010, 23:58 #10
Светланик, я неправильно понял задание. Смотри програму, которую написал easybudda
0
Светланик
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 15
15.12.2010, 00:02  [ТС] #11
в его записи, к сожаленью, я вообще ничего не понимаю(((
1
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
15.12.2010, 01:16 #12
Цитата Сообщение от Светланик Посмотреть сообщение
в его записи, к сожаленью, я вообще ничего не понимаю
На самом деле всё просто: каждый символ unsigned char (unsigned - чтобы правильно обрабатывались символы с кодом > 127) может иметь значения от 0 до UCHAR_MAX (определено в limits.h) - значит всего значений UCHAR_MAX + 1. Создаём массив такого размера, обнуляем его
Цитата Сообщение от easybudda Посмотреть сообщение
memset(symbols, 0, sizeof(symbols));
а дальше в цикле (помня про то, что строка заканчивается нулём) берём по символу. Каждый символ из строки - по сути индекс в массиве символов. Соответственно увеличиваем значение элемента массива, индекс которого равен очередному символу.
Следующим циклом проходим по свежезаполненному массиву. Если значение очередного элемента больше нуля, значит символ равный индексу элемента встречался в строке. По сути в массиве содержатся счётчики символов из строки, при желании можно и их вывести. Но по заданию просто считаем количество элементов массива, больших нуля - это и будет количество уникальных символов в строке...
2
15.12.2010, 01:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2010, 01:16
Привет! Вот еще темы с решениями:

В строке нужно подсчитать сколько раз встречается каждое слово
Здравствуйте! Задача такая: в строке нужно подсчитать сколько раз встречается...

Подсчитать, сколько раз среди символов строки встречается заданная буква
Дана строка символов. Подсчитать, сколько раз среди символов строки встречается...

Сколько раз встречается неразрывный набор символов в строке
Всем привет ! У меня есть программа, которая определяет, есть ли неразрывный...

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


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

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

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