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

Удаление повторяющихся символов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
05.04.2012, 12:22     Удаление повторяющихся символов #1
Задача банальна. Удалить повторяющиеся символы в строке. В интернете шарил, предложенные варианты слишком сложные и непонятные. Язык си, просто си.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.04.2012, 12:49     Удаление повторяющихся символов #2
Порядок символов при выводе не важен?
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
05.04.2012, 12:56  [ТС]     Удаление повторяющихся символов #3
Ну вообще у меня задача с шифрованием методом лозунга. Алфавит abcdefg... и т.д. Я беру лозунг и вставляю его в алфавит в начало, к примеру language, получается languageabcdefg... , должно получится languebcdf...
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.04.2012, 13:09     Удаление повторяющихся символов #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main()
{
    char str[] = "languageabcdefg";
    char alphabet[256] = { 0 };
    char *ptr, *current;
    for(ptr = str; *ptr; ++ptr)
        if(!(alphabet[(int)*ptr]))
            alphabet[(int)*ptr] = 1;
    for(ptr = str, current = str; *ptr; ++ptr)
        if(alphabet[(int)*ptr])
        {
            *current++ = *ptr;
            alphabet[(int)*ptr] = 0;
        }
    *current = '\0';
    printf("%s\n", str);
    return 0;
}
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
05.04.2012, 13:10     Удаление повторяющихся символов #5
Ниче не понял,то вот держи исходник менят определенные буквы на тоже определенные,можешь сам подкорректировать что нужно,в данном случае abc на def

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
47
#include <conio.h>
#include <stdio.h>
#include <io.h>
#include <stdlib.h>
int main()
{
 
        FILE *f1,*f2;//2 файла
        char nameIn[20];//имя файла1(длина)
        char nameOut[20];//имя файла2(длина)
        char str[100] ;//строка в файле
        int size;//переменная
        printf("Vvedite imy faila: ");   //спрашиваешь имя
        scanf("%s",nameIn);       //считываешь имя
        f1 = fopen(nameIn,"r");//открываем файл 1
        while (f1 == NULL)//цикл от ошибок,если не сущевствует файла1
        {
              printf("\tError!\n");
              printf("Vvedite imy faila: ");   //спрашиваешь имя
              scanf("%s",nameIn);       //считываешь имя
              f1 = fopen(nameIn,"r");//открытие файла1
        }
        size = filelength(fileno(f1));//получаем размер файла
        int readsize = fread(str,sizeof(char),sizeof(char)*size,f1);//читают строку из файла по символам.в переменную readsize записывается размер
        for(int i=0;i<readsize;i++)//цикл замены букв в строке из файла
        {
                        if( str[i] == 'a' && str[i+1] == 'b' && str[i+2] == 'c')//происходит замена букв
                                 {
                                 str[i] = 'd';
                                 str[i+1] = 'e';
                                 str[i+2] = 'f';
                                 }
        }
        printf("Vvedite imy vihodnogo faila: ");   //спрашиваешь имя
        scanf("%s",nameOut);       //считываешь имя
        f2 = fopen(nameOut,"w");//открытие файла2
        printf("\n");
        printf("\tRezultat izmeneniy: \n");
        for(int i=0;i<readsize;i++)//цикл показа результата на экране монитора
        {
                printf("%c",str[i]);
                fprintf(f2,"%c",str[i]);
        }
        fclose(f2);//закрытие файла2
        fclose(f1);//закрытие файла1
getch() ;
}
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
05.04.2012, 13:23  [ТС]     Удаление повторяющихся символов #6
Цитата Сообщение от soon Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main()
{
    char str[] = "languageabcdefg";
    char alphabet[256] = { 0 };
    char *ptr, *current;
    for(ptr = str; *ptr; ++ptr)
        if(!(alphabet[(int)*ptr]))
            alphabet[(int)*ptr] = 1;
    for(ptr = str, current = str; *ptr; ++ptr)
        if(alphabet[(int)*ptr])
        {
            *current++ = *ptr;
            alphabet[(int)*ptr] = 0;
        }
    *current = '\0';
    printf("%s\n", str);
    return 0;
}
Не могли бы вы объяснить, насколько это возможно, алгоритм.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 13:25     Удаление повторяющихся символов
Еще ссылки по теме:

C++ Удаление повторяющихся символов
Удаление повторяющихся чисел C++
Поиск повторяющихся символов в тексте и удаление таких строк C++

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

Или воспользуйтесь поиском по форуму:
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.04.2012, 13:25     Удаление повторяющихся символов #7
almostclever, изначально заносим в массив alphabet информацию о каждом символе - если он есть в строеке, то 1, в противном случае 0. Затем проходим по строке, если символ присутствует в массиве alphabet, то копируем его. После всего не забываем добавить '\0'
Yandex
Объявления
05.04.2012, 13:25     Удаление повторяющихся символов
Ответ Создать тему
Опции темы

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