Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66

Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке

19.01.2014, 01:07. Показов 1746. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!Я ломаю голову весь вечер.Я не могу понять в чём ошибка.
Задача:пользователь вводит символы,я должен вывести все неповторяющиеся в алфавитном порядке.
Первый цикл(отбор неповторяющихся символов)работает отлично.Но во втором цикле(упорядочивание по алфавиту)что-то идёт не так.Помогите ,пожалуйста.

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
39
40
41
42
43
44
45
46
#include<iostream>
#include<string.h>
using namespace std;
int main(void)
{
    char latalf[]="abcdefghijklmnopqrstuvwxyz";
    char str[40];
    char mas[30];
    int k,q,i,j,f=strlen(latalf),t;
    cout<<"vvedite svoi simvoli";
    cin.getline(str,41);
    int n=strlen(str);
    q=0;
    for(i=0;i<n;i++)
    {k=0;
        for(j=0;j<n;j++)
        {
            if(str[i]==str[j])
            {
                k++;
            }
 
        }
        if(k<2)
        {
            mas[q]=str[i];
            q++;
        }
    }
    t=0;
    cout<<endl;
    for(i=0;i<f;i++)
    {
        for(j=0;j<q;j++)
        {
           if(latalf[i]==mas[j])
           {
               mas[t]=latalf[i];
               cout<<mas[t];
               t++;
           }
        }
    }
system("PAUSE");
return(0);
}
Вложения
Тип файла: txt Новый текстовый документ.txt (644 байт, 9 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.01.2014, 01:07
Ответы с готовыми решениями:

Упорядочить символы в алфавитном порядке, при этом все повторяющиеся символы должны быть удалены и переписать новый текст в файл D
23. Задан текстовый файл С, состоящий из произвольной последовательности буквенных символов. Упорядочить символы в алфавитном порядке, при...

Вывести в алфавитном порядке все уникальные символы
Доброго времени суток! Вопрос: задан массив из К символов латинского алфавита. Вывести на экран в алфавитном порядке все символы,...

Вывести на экран в алфавитном порядке все символы которые входят в массив по одному разу
Срочно нужна программа... Вот условие... Задан массив из k символов латинского алфавита. Вывести на экран в алфавитном порядке все...

14
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
19.01.2014, 05:29
Код следует выкладывать на форум

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <map>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::map<char, int> m; // буква - количество повторов
    for (size_t i=0; i < str.length(); i++)
        ++m[str[i]];
    for (std::map<char, int>::const_iterator cit = m.begin(); cit != m.end(); ++cit)
        if (cit->second == 1)
            std::cout << cit->first << " ";
    std::cout << std::endl;
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.01.2014, 10:15
MrGluck,
C++
1
#include <string>
И range-for с auto можно для сокращения букоф.
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
19.01.2014, 10:30
В последнем цикле не надо затирать полученный массив.
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
39
40
#include<iostream>
#include<string.h>
using namespace std;
int main(void)
{
    char str[42];
    char mas[30];
    int k,q,i,j,t;
    cout<<"vvedite svoi simvoli";
    cin.getline(str,41);
    int n=strlen(str);
    q=0;
    for(i=0;i<n;i++)
    {
        k=0;
        for(j=0;j<n;j++)
        {
            if(str[i]==str[j])
            {
                k++;
            }
 
        }
        if(k<2)
        {
            mas[q]=str[i];
            q++;
        }
    }
    t=0;
    cout<<endl;
    for(char i='a';i<='z';i++)
    {
        for(j=0;j<q;j++)
           if(i==mas[j])
               cout<<i;
    }
    system("PAUSE");
    return(0);
}
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
19.01.2014, 10:32
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
#include <iostream>
#include <cstring>
 
int main()
{
    const int maxLength = 128;
    char str[maxLength],tmp[maxLength]="";
    std::cin.getline (str,maxLength);
    int k = 0;
    int length = strlen(str);
    for (int i=0; i<length; i++)
    {
        if (!strchr(tmp,str[i]))
            tmp[k++] = str[i];
    }
    char temp;
    bool flag;
    int tmpLength = strlen(tmp);
    do
    {
        flag = false;
        for (int i=0; i<tmpLength-1; i++)
        {
            if (tmp[i] > tmp[i+1])
            {
                temp = tmp[i];
                tmp[i] = tmp[i+1];
                tmp[i+1] = temp;
                flag = true;
            }
        }
    }
    while (flag);
    std::cout <<tmp <<std::endl;
    return 0;
}
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
19.01.2014, 13:30  [ТС]
Можете объяснить ,что значит- затирать?
Я знаю как сделать иначе(просто вывожу в цикле if latalf[i]),но не могу успокоиться,пока не пойму почему по-старому не получалось.
Ведь всё логично:берётся нулевой элемент латинского алфавита и ищет совпадение с одним из мне нужного массива . И в случае совпадения,элемент записывается нулевым в мой массив . И т.д.
Объясните ,пожалуйста.
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
19.01.2014, 13:52
Цитата Сообщение от slevin_45 Посмотреть сообщение
что значит- затирать?
см.
Цитата Сообщение от slevin_45 Посмотреть сообщение
mas[t]=latalf[i];
стирается старое значение mas[t] и при следующем проходе будет ошибка.
Да и записывать их по условию задачи не нужно
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
19.01.2014, 14:23  [ТС]
Цитата Сообщение от slevin_45 Посмотреть сообщение
mas[t]=latalf[i];
cout<<mas[t];
t++;
Но ведь тут t меняется.Следовательно,каждый следующий элемент имеет порядковый номер на один больше предыдущего.Т.е. ,например,в нулевой элемент массива mas занеслось,например,"h" и всё,мы ведь более нуkевой элемент не трогаем,как я могу его затереть?
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
19.01.2014, 15:19
Цитата Сообщение от slevin_45 Посмотреть сообщение
for(j=0;j<q;j++)
{
if(latalf[i]==mas[j])
А здесь разве нулевой элемент при следующем цикле не читается?
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
19.01.2014, 15:41  [ТС]
Я вроде бы понял. Но понял ,видимо,не так,как вы говорите.
Своим циклом я просто создаю копию элемента . Т.е.,например,совпадение,с элементом 3-им и потом я просто в нулевой элемент вкладываю тот же третий элемент и в итоге я получаю,что у меня в моём массиве,два одинаковых элемента.
Правильно ли я понял?
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
19.01.2014, 15:52
Пусть у Вас в mas[0] сидит буква b, в mas[3] - буква a
Тогда при первом проходе цикла по j в mas[0] запишется "a", а "b" cотрется
и при втором проходе "b" не найдется.
1
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
19.01.2014, 15:54  [ТС]
Спасибо Вам огромное!!!
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
19.01.2014, 15:59
C++
1
2
3
4
5
6
7
8
9
char str[25];
char* ptr=str;
int cnt[128]={0};
char i;
cin>>str;
while(*ptr>0)
  cnt[*ptr++]++;
for(i=0; i<=127; i++)
  if (cnt[i]==1) cout<<i;
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
19.01.2014, 18:21
Цитата Сообщение от Tulosba Посмотреть сообщение
Код C++
1
#include <string>
И range-for с auto можно для сокращения букоф.
первое забыл случайно, а второе не сделал т.к. захотел код привести под С++98. Вроде бы заметно из предыдущих моих постов, что про for-цикл по коллекции я в курсе.
0
19.01.2014, 20:54

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Вроде бы заметно из предыдущих моих постов, что про for-цикл по коллекции я в курсе.
Ну, может быть тоже случайно забыто. Who knows. :pardon: Просто указал свою точку зрения на код.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.01.2014, 20:54
Помогаю со студенческими работами здесь

Вывести на экран в алфавитном порядке все символы, которые входят в заданный массив по одному разу
Задан массив из k символов латинского алфавита. Вывести на экран в алфавитном порядке все символы, которые входят в этот массив по...

Напечатать все символы строки в алфавитном порядке
Дана строка символов, напечатать все символы, входящие в строку в алфавитном порядке. Если в исходной строке символ встречается несколько...

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

Вывести на экран в алфавитном порядке символы, встречающиеся в массиве один раз
Дан массив символов английского алфавита. Вывести на экран в алфавитном порядке символы, встречающиеся в массиве один раз. в с++ билдер

Вывести символы латинского алфавита (глухие буквы) на экран, в обратном алфавитном порядке
Дана произвольного размера символьная строка, которую надо заполнить в ручную латинскими буквами. Вывести на экран в обратном алфавиту...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru