Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/60: Рейтинг темы: голосов - 60, средняя оценка - 4.58
Aeviternus
0 / 0 / 0
Регистрация: 14.11.2008
Сообщений: 8
1

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

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

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

Подсчёт количества символов и количества строк в файле
Нужно написать программу, которая запрашивает у пользователя имя (адрес) текстового файла, далее...

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

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

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

3
CheshireCat
Эксперт С++
2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
14.11.2008, 19:10 2
Да не нужен здесь никакой цикл. Все горааааааздо проще.
1. Заводишь массив int'ов размером, грубо, 256 (считаем пока, что ты не работаешь в Unicode).
2. Обнуляешь его весь.
3. Проходишь по строке и каждый символ строки интерпретируешь как unsigned char - индекс элемента в массиве. Инкрементируешь соответствующий элемент в массиве.
4. Вуаля! По завершении, каждый элемент массива содержит, сколько раз встретилась данная буква в строке.
1
Aeviternus
0 / 0 / 0
Регистрация: 14.11.2008
Сообщений: 8
14.11.2008, 19:32  [ТС] 3
не доходит(( а как потом вывести, КАКИЕ именно символы используются? то бишь
букофф "а" - столько-то
букофф "b" - столько-то
и т.д.
0
master.EXE
88 / 16 / 5
Регистрация: 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
0
14.11.2008, 20:49
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2008, 20:49

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

Подсчёт количества символов
И снова здравствуйте, уважаемые. Обращаюсь с просьбой помочь в решении такой задачи: &quot;В каждом...

Подсчёт количества символов
Здравствуйте, возник вопрос: Почему в функцию не передаётся вся строка, например я пишу &quot;qwerty...

Подсчет цифр, символов-разделителей и прочих символов в массиве
Здравствуйте. В учебнике дан код: #include &lt;stdio.h&gt; /* подсчет цифр, символов-разделителей и...

Подсчёт количества символов из TextBoxa
Есть код, задача которого - выводить количество символов в label. Как нужно модифицировать код,...


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

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

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