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

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

Войти
Регистрация
Восстановить пароль
 
DStavi
0 / 0 / 0
Регистрация: 01.04.2014
Сообщений: 3
#1

Удаление из строки повторяющихся элементов (через функцию) - C++

01.04.2014, 16:58. Просмотров 555. Ответов 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
41
#include <iostream>
#include <math.h>
 
using namespace std; 
 
//Удаление повторяющихся элементов в алфавите
void Alphabet_Sort(char* (&alphabet))
{
    int cur = 0; //Номер элемента из алфавита который мы проверяем
    char* correct;//Cоздали алфавит в котором символы алфавита не повторяются
    correct = new char [strlen(alphabet)];
    strset(correct, '\0');
    char s = alphabet[0];
    int count = 0;
    while(s!= '\0')
    {
            //Если в алфавите без повторений нет символа из текущего алфавита
            //То копируем его в конец строки алфавита без повторений
 
        if(!strchr(correct, int(s)))
            {
                correct[count] = s; 
                count++;
            }
            cur++;
            s = alphabet[cur];
    }
    //Заменили исходный алфавит алфавитом без повторений
    strcpy(alphabet, correct);
    delete[] correct;
}
 
int main()
{
    char* s = "abdcaabbcc\0";
    cout<<s<<endl;
    Alphabet_Sort(s);
    cout<<s;
    system("Pause");
    return 0;
}
На вызове strcpy(alphabet, correct); : "Необработанное исключение в "0x0f35d2e9"... Я без понятия из-за чего возникает ошибка. Помогите, пожалуйста)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2014, 16:58     Удаление из строки повторяющихся элементов (через функцию)
Посмотрите здесь:

Сохранение строки в массив и удаление повторяющихся элементов массива - C++
Нужно сделать так, что бы строка занасилась в массив без повтора элементов.(к примеру строка: &quot;Травка зеленеет, солнышко блестит.&quot; , а в...

Удаление повторяющихся символов из строки - C++
Необходимо написать функцию delete_repeats, которая удаляет все повторяюшиеся символы из строки. например: Only three more lessons...

Удаление из строки повторяющихся символов - C++
Например Ввод: ABBGBAZ Вывод: ABGZ

Найти ошибку: удаление повторяющихся слов из строки - C++
Написал программу, которая должна удалить из строки повторяющиеся слова. слова разделены только пробелом компилятор ни на что не...

Удаление повторяющихся элементов в векторе - C++
Нужно перегрузить унарный оператор ~ что бы он удалял повторяющиеся элементы в векторе vector&amp; operator ~ () { if (count &gt; 0) ...

Удаление из вектора повторяющихся элементов - C++
есть вектор vector&lt;int&gt; array; я считаю в него из файла, подскажите как мне удалить одинаковые цифры, то есть если есть 10 и 10 должно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
241 / 224 / 77
Регистрация: 21.02.2013
Сообщений: 518
Завершенные тесты: 1
01.04.2014, 19:46     Удаление из строки повторяющихся элементов (через функцию) #2
тут наверное дело в том что сразу инициализируешь char* s = "abdcaabbcc\0";
я попробовал чуть по другому тогда все нормально работает
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 <math.h>
#include <cstring>
 
using namespace std;
 
//Удаление повторяющихся элементов в алфавите
void Alphabet_Sort(char* alphabet)
{
    int cur = 0; //Номер элемента из алфавита который мы проверяем
    char* correct;//Cоздали алфавит в котором символы алфавита не повторяются
    correct = new char [strlen(alphabet)+1];
 
    char s = alphabet[0];
    int count = 0;
    while(s!= '\0')
    {
            //Если в алфавите без повторений нет символа из текущего алфавита
            //То копируем его в конец строки алфавита без повторений
 
        if(strchr(correct, int(s))==0)
            {
                correct[count] = s;
                count++;
            }
            cur++;
            s = alphabet[cur];
    }
    //Заменили исходный алфавит алфавитом без повторений
    strcpy(alphabet,correct);
    delete[] correct;
}
 
int main()
{
 
    char s[30];
   cin>> s;
 
 
    cout<<s<<endl;
    Alphabet_Sort(s);
 
    cout << s;
    return 0;
}
DStavi
0 / 0 / 0
Регистрация: 01.04.2014
Сообщений: 3
03.04.2014, 22:32  [ТС]     Удаление из строки повторяющихся элементов (через функцию) #3
Решение приведенное вами компилируется и это хорошо) Однако, оно не решает поставленную задачу. Решил проблему изменением типа функции с void на char*, т.е. теперь не изменяю входящую строку, а отдаю на выход измененную.
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
#include <iostream>
#include <math.h>
 
using namespace std; 
 
//Удаление повторяющихся элементов в алфавите
char* Alphabet_Sort(char* alphabet)
{
    int cur = 0; //Номер элемента из алфавита который мы проверяем
    char* correct;//Cоздали алфавит в котором символы алфавита не повторяются
    correct = new char [strlen(alphabet)];
    strset(correct, '\0');
    char s = alphabet[0];
    int count = 0;
    while(s!= '\0')
    {
            //Если в алфавите без повторений нет символа из текущего алфавита
            //То копируем его в конец строки алфавита без повторений
 
        if(!strchr(correct, int(s)))
            {
                correct[count] = s; 
                count++;
            }
            cur++;
            s = alphabet[cur];
    }
    //Заменили исходный алфавит алфавитом без повторений
    return correct;
}
 
int main()
{
    char* s = "aaabbbcccddd\0";
    cout<<s;
    cout<<endl;
    s = Alphabet_Sort(s);
    cout<<s<<endl;
    system("Pause");
    return 0;
}
Проблема возникала из-за того что мы не можем изменить строку в функции подавая ее на вход подобным образом: void Alphabet_Sort(char* (&alphabet))
jurok_85
241 / 224 / 77
Регистрация: 21.02.2013
Сообщений: 518
Завершенные тесты: 1
04.04.2014, 15:18     Удаление из строки повторяющихся элементов (через функцию) #4
что то некорректно ваша программа работает выводит, после изменения выводит символы непонятные в конце. изменил немного тут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while(s!= '\0')
    {
            //Если в алфавите без повторений нет символа из текущего алфавита
            //То копируем его в конец строки алфавита без повторений
 
        if(!strchr(correct, int(s)))
            {
                correct[count] = s;
                count++;
            }
            cur++;
            s = alphabet[cur];
    }
    correct[count ] = '\0';
return correct;
теперь стало без символов непонятных выводить по крайней мере у меня на code::blocks
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2014, 14:51     Удаление из строки повторяющихся элементов (через функцию)
Еще ссылки по теме:

Удаление из массива повторяющихся элементов - C++
Значит,задача : удалить повторы в массиве, оставив по одному вхождению! моя идея. если 2 компонента, стоящие рядом, равны друг другу,...

Удаление повторяющихся элементов из списка - C++
Всем привет! Прошу помощи, надо написать функцию удаления всех повторяющихся элементов из списка. Например надо получить из a b g c d a b c...

Удаление повторяющихся элементов в односвязном списке - C++
Добрый день! Задание такое: построить линейный список из нескольких динамических переменных, содержащих вводимые целые числа....

Сравнение двух векторов <string>, удаление повторяющихся элементов - C++
# include &lt;iostream&gt; # include &lt;vector&gt; # include &lt;iterator&gt; # include &lt;string&gt; # include &lt;fstream&gt; # include &lt;cstdio&gt; #...

Удаление динамического массива через функцию free - C++
Доброго времени суток! Есть вот такой вопрос: имеется код программы, в которой динамический массив удаляется с помощью операции delete....

Удаление строки из файла через сдвиги. - C++
Добрый день. Прощу помочь с защитой лабы. Есть файл тхт, в нем названия банков и значения по годам: Банк 2000г 2001г ВТБ; 35.4; 31.5 ...


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

Или воспользуйтесь поиском по форуму:
DStavi
0 / 0 / 0
Регистрация: 01.04.2014
Сообщений: 3
05.04.2014, 14:51  [ТС]     Удаление из строки повторяющихся элементов (через функцию) #5
Хм, в Microsoft Visual Studio 2010 код пока что правильно работает, а при изменении на ваш вариант: в измененной строке "пропадает" последний символ. Но, спасибо за ответ)
Yandex
Объявления
05.04.2014, 14:51     Удаление из строки повторяющихся элементов (через функцию)
Ответ Создать тему
Опции темы

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