Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Вывод уникальных символов


Автор: makmar 6.1.2008, 10:16
Дан текст символов, вывести на экран только те символы, которые встречаются в тексте только один раз.

Я просто начинающий программист, и пока С++ не очень знаю....

Автор: makmar 6.1.2008, 13:41
Мне не хватает только одного, в C++ есть такая функция как вырезать, господа модератовы, может вы поможете, правда сильно надо....

Автор: PPS05 6.1.2008, 17:11
Вот это?
Код

#include <stdio.h>
#include <string.h>

// Наша строка
char * str = "This is a sample text.";
// Здесь запомним, сколько каких символов
int symbolCount[256];

int main(void)
{
    unsigned int i;
    for (i=0; i<256; i++)
        symbolCount[i] = 0;
    // Посчитаем...
    for (i=0; i<strlen(str); i++)
        symbolCount[str[i]]++;
    // Выведем нас интересующие
    for (i=0; i<256; i++)
        if (symbolCount[i] == 1)
            printf("'%c' ", i);
    return 0;
}

Автор: makmar 6.1.2008, 22:46
Спасибо большое, это как раз то, что нужно....

Автор: daNick 10.1.2008, 08:09
Люди, помогите, вы видте в проге PPS05
16 строчка-что она значит, никак не могу разобраться
Скажите прям дословно, заранее спасибо огромное.....

Автор: GIK 10.1.2008, 09:46
symbolCount[str[i]]++; - Эта?  smile 
Увеличение значения в массиве symbolCount по индексу str[i], но это ты сам видишь, а вот...  
Логи такая: Грубо говоря каждый, эллемент в массиве symbolCount соответствует символу, каждый символ это значение (число если хочешь) и обращаясь к этим индексам увеличиваем значение.

Например, находим символ 'а', предположим что он имеет значение 1, обращаемся к эллементу symbolCount[1], увеличиваем его, далее если когда нибудь попадеться еще раз этот символ, то опять обращаемся к нему (symbolCount[1] или symbolCount['a']) и увеличиваем его. 


PS: Не совсем красиво объяснил конечно, но как уж умею, есди что звиняйте smile 

Автор: t_gran 10.1.2008, 10:02
Там всё просто:

индекс symbolCount и есть текущий символ. Из примера:
'T' -> 84, 'h' -> 104, 'i' -> 105 и т.д. (см. ASCII)

Так вот, когда мы встречаем тот или иной символ значение элемента symbolCount с индексом str[i] (рассматривай его не как char, а как int) инкрементируется.

В итоге просмотрев symbolCount можно определить какие символы сколько раз встретелись.

PPS05, очень оригинально. smile

Автор: daNick 10.1.2008, 12:59
Эээ... извините, конечно... Но дело в том, что я не писал посты в данной теме... Это я точно помню... Возможно ли, что мой аккаунт взломали? ((( Да и кому это нужно?..

Автор: makmar 11.1.2008, 07:57
А я вот не понял насчет SymbolCount, например что будет выводить SymbolCount для буквы "а", и вообще как он действует, мне то понятно после авших рассуждений, но преподша пристала, типа досконально её надо.....

Автор: PPS05 11.1.2008, 15:13
Угу. Элемент symbolCount[C] хранит количество символов C во входной строке. Мы знаем, что тип char хранит 256 различных символов. Мы заводим symbolCount[256] и, в строке 16 увеличиваем значение symbolCount[] для соответствующего символа str[i]. Т.е. symbolCount['a'] - суть количество символов 'a' в исходной строке (и так для всех символов).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)