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

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

Восстановить пароль Регистрация
 
DStavi
0 / 0 / 0
Регистрация: 01.04.2014
Сообщений: 3
01.04.2014, 16:58     Удаление из строки повторяющихся элементов (через функцию) #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
#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"... Я без понятия из-за чего возникает ошибка. Помогите, пожалуйста)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
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
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
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
DStavi
0 / 0 / 0
Регистрация: 01.04.2014
Сообщений: 3
05.04.2014, 14:51  [ТС]     Удаление из строки повторяющихся элементов (через функцию) #5
Хм, в Microsoft Visual Studio 2010 код пока что правильно работает, а при изменении на ваш вариант: в измененной строке "пропадает" последний символ. Но, спасибо за ответ)
Yandex
Объявления
05.04.2014, 14:51     Удаление из строки повторяющихся элементов (через функцию)
Ответ Создать тему
Опции темы

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