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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.87
Aeviternus
0 / 0 / 0
Регистрация: 14.11.2008
Сообщений: 8
#1

Подсчет количества символов в массиве (строка) - C++

14.11.2008, 19:04. Просмотров 6788. Ответов 3
Метки нет (Все метки)

задачка в общем-то несложная... но загнала в ступор. задаем набор латинских буков. надо подсчитать количество используемых символов, и если они повторяются, то вывести число повторов. в принципе понятно, что тут нужен двойной цикл. берем там первый символ, сравниваем со всеми, затем второй... но как избежать накладок? допустим когда второй символ берем, то в цикле будет сравнение с ним самим, и в повтор пойдет +1. плюс еще загвоздка. допустим строка abacdefgabcdabc. когда счетчик сравнения будет на второй букве"a", ее надо исключить, ведь она уже подсчитана. подскажите плз, как лучше сделать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2008, 19:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчет количества символов в массиве (строка) (C++):

Подсчет количества символов - C++
написать программу какая с позиционной системы счисления выводит как число в десятичной системе счисления. То есть когда вводишь символы...

Подсчет количества символов - C++
Доброго времени суток всем! помогите,пожалуйста,решить задачу: Программа должна подсчитывать количество символов в заданном текстовом...

Подсчет количества символов в тексте - C++
здравствуйте . написал программу которая считает кол-во символов в тексте . Но она выдает ошибку, в чем дело? int show_cimvol(char...

Подсчет количества символов в файле - C++
дан файл в нем содержится допустим 40 символов нужно чтоб программа подсчитала количество символов в файле и вывела на экран это количество...

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

Подсчет количества символов в строке - C++
программа должна считать кол-во символов в строке но выдает 0 #include "stdafx.h" #include "iostream" using namespace std; int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,368
14.11.2008, 19:10 #2
Да не нужен здесь никакой цикл. Все горааааааздо проще.
1. Заводишь массив int'ов размером, грубо, 256 (считаем пока, что ты не работаешь в Unicode).
2. Обнуляешь его весь.
3. Проходишь по строке и каждый символ строки интерпретируешь как unsigned char - индекс элемента в массиве. Инкрементируешь соответствующий элемент в массиве.
4. Вуаля! По завершении, каждый элемент массива содержит, сколько раз встретилась данная буква в строке.
Aeviternus
0 / 0 / 0
Регистрация: 14.11.2008
Сообщений: 8
14.11.2008, 19:32  [ТС] #3
не доходит(( а как потом вывести, КАКИЕ именно символы используются? то бишь
букофф "а" - столько-то
букофф "b" - столько-то
и т.д.
master.EXE
88 / 16 / 2
Регистрация: 10.03.2008
Сообщений: 101
14.11.2008, 20:49 #4
Моё предложение таково: идти двойным циклом, как еще предлагал автор темы, но, при этом, на каждом шаге проверять, был ли использован в подсчете текущий символ, т.е., проверялся ли он? Это реализует функция iswas():
C++
1
2
3
4
5
6
7
int iswas(char * source, int nmbr)
{
    for(int i=0;i<nmbr;i++)
        if(source[i]==source[nmbr])
        return 1;
    return 0;
}
Функция принимает два аргумента: указатель на строку и номер текущего символа. Происходит проверка всех символов до текущего и в цикле все предыдущие символы сравниваются с текущим. В зависимости от результата проверки функция возвращает 0 или 1.
Ну а вот сам текст программы:
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
#include<iostream.h>
#include<conio.h>
const int MAX=50;
int iswas(char *, int);
int main()
{
    char line[MAX];
    int count;
    clrscr();
    cout<<"Input the line: ";
    cin>>line;
    for(int i=0;line[i]!='\0';i++)
    {
        if(!iswas(line, i)) // проверка
        {
                       count=1;
                       cout<<line[i]<<" - ";
        for(int j=0;line[j]!='\0';j++)
        {
            if(j==i)
            continue;
            if(line[j]==line[i])
            count++;
        }
        cout<<count<<endl;
        }
    }
    getch();
 
    return 0;
}
int iswas(char * source, int nmbr)
{
    for(int i=0;i<nmbr;i++)
        if(source[i]==source[nmbr])
        return 1;
    return 0;
}
Добавлено через 32 минуты 6 секунд
Да не нужен здесь никакой цикл. Все горааааааздо проще.
Интересная идея....Я бы даже сказал довольно таки эффективный метод. Т.е. мы экономим на процессорном времени, но при этом есть один недостаток - использование большого, зачастую излишнего объема памяти. Для больших объемов информации этот метод отлично подходит, но если требуется обработать небольшой текст - то довольно таки затратно выходит... Но, при этом идея мне понравилась.
CheshireCat +1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2008, 20:49
Привет! Вот еще темы с ответами:

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

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

Подсчет количества разных символов в строке - C++
в строке, вводимой пользователем, подсчитать количество разных символов. сделать при помощи string.h была идея сделать счетчик, который...

Подсчет количества пробелов в символьном массиве - C++
Здравствуйте! Впервые работаю с символьными массивами. Суть задания - определить символьный массив размером строки. Ввести предложение...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.11.2008, 20:49
Ответ Создать тему
Опции темы

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