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

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

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

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

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

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

C++ Подсчет количества символов в каждом слове предложения с 7 слов
C++ Подсчет количества различных элементов в массиве
C++ Подсчет количества символов
Подсчет количества символов в файле C++
C++ Подсчет количества символов
Подсчет количества символов пунктуации в строке C++
Подсчет количества символов в тексте C++
C++ Подсчет количества символов в строке
C++ Подсчет количества пробелов в символьном массиве
C++ Подсчет количества различных символов в строке
C++ Подсчет количества символов в строке
C++ Подсчет количества разных символов в строке

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,345
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
111 / 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
Yandex
Объявления
14.11.2008, 20:49     Подсчет количества символов в массиве (строка)
Ответ Создать тему
Опции темы

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