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

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

Восстановить пароль Регистрация
 
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
19.01.2014, 01:07     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #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
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 байт, 8 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2014, 01:07     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке
Посмотрите здесь:

C++ Вывести на экран в алфавитном порядке все символы которые входят в массив по одному разу
C++ Упорядочить символы в алфавитном порядке, при этом все повторяющиеся символы должны быть удалены и переписать новый текст в файл D
C++ Вывести символы латинского алфавита в обратном алфавитном порядке
C++ Если в A есть символы из B и в B нет повторяющихся символов, то упорядочить символы B в порядке, обратном к алфавитном
Вывести в алфавитном порядке все уникальные символы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
19.01.2014, 05:29     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #2
Код следует выкладывать на форум

Добавлено через 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;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.01.2014, 10:15     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #3
MrGluck,
C++
1
#include <string>
И range-for с auto можно для сокращения букоф.
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
19.01.2014, 10:30     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #4
В последнем цикле не надо затирать полученный массив.
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);
}
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
19.01.2014, 10:32     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #5
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;
}
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
19.01.2014, 13:30  [ТС]     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #6
Можете объяснить ,что значит- затирать?
Я знаю как сделать иначе(просто вывожу в цикле if latalf[i]),но не могу успокоиться,пока не пойму почему по-старому не получалось.
Ведь всё логично:берётся нулевой элемент латинского алфавита и ищет совпадение с одним из мне нужного массива . И в случае совпадения,элемент записывается нулевым в мой массив . И т.д.
Объясните ,пожалуйста.
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
19.01.2014, 13:52     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #7
Цитата Сообщение от slevin_45 Посмотреть сообщение
что значит- затирать?
см.
Цитата Сообщение от slevin_45 Посмотреть сообщение
mas[t]=latalf[i];
стирается старое значение mas[t] и при следующем проходе будет ошибка.
Да и записывать их по условию задачи не нужно
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
19.01.2014, 14:23  [ТС]     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #8
Цитата Сообщение от slevin_45 Посмотреть сообщение
mas[t]=latalf[i];
cout<<mas[t];
t++;
Но ведь тут t меняется.Следовательно,каждый следующий элемент имеет порядковый номер на один больше предыдущего.Т.е. ,например,в нулевой элемент массива mas занеслось,например,"h" и всё,мы ведь более нуkевой элемент не трогаем,как я могу его затереть?
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
19.01.2014, 15:19     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #9
Цитата Сообщение от slevin_45 Посмотреть сообщение
for(j=0;j<q;j++)
{
if(latalf[i]==mas[j])
А здесь разве нулевой элемент при следующем цикле не читается?
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
19.01.2014, 15:41  [ТС]     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #10
Я вроде бы понял. Но понял ,видимо,не так,как вы говорите.
Своим циклом я просто создаю копию элемента . Т.е.,например,совпадение,с элементом 3-им и потом я просто в нулевой элемент вкладываю тот же третий элемент и в итоге я получаю,что у меня в моём массиве,два одинаковых элемента.
Правильно ли я понял?
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
19.01.2014, 15:52     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #11
Пусть у Вас в mas[0] сидит буква b, в mas[3] - буква a
Тогда при первом проходе цикла по j в mas[0] запишется "a", а "b" cотрется
и при втором проходе "b" не найдется.
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
19.01.2014, 15:54  [ТС]     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #12
Спасибо Вам огромное!!!
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.01.2014, 15:59     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #13
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;
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
19.01.2014, 18:21     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке #14
Цитата Сообщение от Tulosba Посмотреть сообщение
Код C++
1
#include <string>
И range-for с auto можно для сокращения букоф.
первое забыл случайно, а второе не сделал т.к. захотел код привести под С++98. Вроде бы заметно из предыдущих моих постов, что про for-цикл по коллекции я в курсе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2014, 20:54     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Tulosba
19.01.2014, 20:54     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке
  #15

Не по теме:

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

Yandex
Объявления
19.01.2014, 20:54     Пользователь вводит символы, вывести все не повторяющиеся в алфавитном порядке
Ответ Создать тему
Опции темы

Текущее время: 23:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru