Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 20.10.2016
Сообщений: 28

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

25.02.2017, 09:54. Показов 941. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется последовательность символов, нужно удалить все повторяющиеся.
Символы вводятся в input.txt, выводятся в output.txt в папке проекта.
Сейчас все работает, но криво, что-то с последовательностью проверки не так (процедура actTxt), нужно сделать чтобы работало)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <cstdio> 
#include <cstdlib> 
 
#define _CRT_SECURE_NO_WARNINGS 
 
struct elem {
    char data;
    elem *next;
};
 
 
elem* inputTxt(FILE *fp) {
    elem *x, *h;
    h = new elem;
    x = h;
    char c;
    while (fscanf_s(fp, "%c", &c) && c != '.') {
        x->next = new elem;
        x = x->next;
        x->data = c;
    }
    x->next = NULL;
    return h;
}
 
 
void outputTxt(FILE *fp,elem *h) {
    elem *x;
    x = h->next;
    while (x!= NULL) {
        fprintf(fp, "%c", x->data);
        x = x->next;
    }
}
 
 
void actTxt(elem *h) { 
elem *x;
elem *y;
elem *del;
    int f;
    x=h;
    x=x->next;
    while(x!=NULL)
    {
        f=1;
        y=x->next;
        while(f==1 && y)
        {
            if (x->data==y->data) 
            { 
                 del = x->next; 
                 x->next = x->next->next; 
                 delete del;
                 f = 0;
 
            }
            y=y->next;
        }
                if(f==1)
                x=x->next;
        }
    }
 
int main()
{
    FILE *fip;
    FILE *fop;
    elem *h;
    fopen_s(&fip, "input.txt", "r");
    h= inputTxt(fip);
    fclose(fip);
    actTxt(h);
    fopen_s(&fop, "output.txt", "w");
    outputTxt(fop, h);
    fclose(fop);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2017, 09:54
Ответы с готовыми решениями:

Удалить повторяющиеся символы
Вывести текстовую строку без повторяющихся символов. Подскажите пожалуйста, в чем ошибка? Выдает, что sym = a.Substring(i, 1)...

Удалить в тексте повторяющиеся символы
Ребят, помогите пожалуйста.. Кто чем может, заранее спасибо. Очень надо. 21. Задача на множества. Дан текст. Удалить в нем...

Удалить из строки повторяющиеся символы
Дана строка. Удалить из строки повторяющиеся символы. Например: ’aaaabbbaccccdd’ -&gt; ’abacd’

5
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
25.02.2017, 10:43
Алгоритм фиговый. Лучше делать проверку на этапе считывания символа, чем тупо валить все в память и потом в ней рыться. А еще лучше отказаться от самодельных структур и воспользоваться стандартным std::map или std::set, у них есть метод .find(..) и не нужно будет шариться по указателям.
Если взять map<char, DWORD>, то можно подсчитать количество совпадений каждого из встречающихся символов.
0
0 / 0 / 0
Регистрация: 20.10.2016
Сообщений: 28
25.02.2017, 10:50  [ТС]
Спасибо, но нужно обойтись этим кодом
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
27.02.2017, 10:58
demon1512, выполняя программу по шагам можно проверить, как работает функция inputTxt. Правильно ли она строит список. См. рисунок.
Миниатюры
Удалить повторяющиеся символы из документа  
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
27.02.2017, 11:13
Добавим функцию, которая выводит содержимое списка.
C++
1
2
3
4
5
6
7
8
9
10
void show( elem *h) {
    // вывод списка на экран 
  if( ! h ) {
    printf( "\n  Error.  Null pointer. \n" );
    return;
  }
  while ( ... ) {
    printf ( ... );
  }
}
При изменении списка посмотрим, что происходит
C++
1
2
3
4
5
6
7
8
while(x!=NULL)
{
    f=1;
    y=x->next;
    while(f==1 && y)
    {
                 printf( "\n   x:  "); show( x );
                 printf( "\n   y:  "); show( y );
0
22 / 22 / 7
Регистрация: 01.02.2017
Сообщений: 54
Записей в блоге: 1
01.03.2017, 15:33
По-моему, должно быть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void actTxt(elem *pe)
{
    assert(pe);
    elem *ptmp;
    while(pe->next)
    {
        if(pe->data == pe->next->data)
        {
            ptmp = pe->next;
            pe-next = pe->next->next;
            delete ptmp;
        }
        pe = pe->next;
    }
}
Добавлено через 7 минут
Даже ещё короче:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void actTxt(elem *pe)
{
    while(pe && pe->next)
    {
        if(pe->data == pe->next->data)
        {
            elem *ptmp = pe->next;
            pe-next = pe->next->next;
            delete ptmp;
        }
        pe = pe->next;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.03.2017, 15:33
Помогаю со студенческими работами здесь

В строке удалить повторяющиеся символы
Подскажите как удалить символ в строке? на с++ есть: &quot;erase&quot; а на c# что ?

Удалить повторяющиеся символы из списка
Удалить повторяющиеся символы из списка.с помощью двусвязного списка

Удалить повторяющиеся символы в строке
Здраствуйте, помогите пожалуйста. Необходимо удалить повторяющиеся элементы в строке с помощью цикла while и методов string.Replace и...

Удалить из файла повторяющиеся символы
здравствуйте, уважаемые форумчане, дано задание - убрать из текста повторяющиеся символы, оригинальный текст брать из файла,...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru