Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2012, 19:33   #1
leito87
 
Регистрация: 03.01.2012
Сообщений: 5
По умолчанию Строки, дублирующиеся символы, С++

Уже вторые сутки бьюсь над решением задачи:
Вводится строка с клавиатуры(случайные символы),из нее надо извлечь все дублирующиеся символы.Например:
abcdeefagggh
на выходе:
abcdefgh
Вот код который смог придумать:
Код:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	const int NUM = 25;
	int i;
	int g;
	int b = 0;
	int k;
	int l[NUM];
	char buf[NUM];
	char buf1[NUM];
	cin >> buf;
	for(i = 0 ;i<NUM;i++)
	{
		for(g = 0;g<NUM;g++)
		{
				if(buf[i] == buf[g] & i != g & i < g )
				{
					l[b] = i;
					cout << l[b];
					b++;
				}
				
		}
	}
	cout << endl;
	b = 0;
	for(k = 0;k<NUM;k++)
		{
	label1:
	if(l[b] == l[b+1])
	{
		b++;
		goto label1;
	}
	else
	{
			if(k!=l[b])
			{
				cout << buf[k];
				b++;
			}
			if(k==l[b])
			{
				b++;
			}
		}
	}
	getch();
	return 0;
}
Но он не совсем работает!
Если есть идеи,можете подсказать(алгоритмы,код,функции)?

Последний раз редактировалось rpy3uH; 16.01.2012 в 14:07.
leito87 вне форума Ответить с цитированием
Старый 15.01.2012, 20:09   #2
Skolos
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 36
По умолчанию

Код проверять лень. Извините. Думаю чамое простое будет:
1 - узнать количество символов в строке
2 - выбрать первый символ и в цикле сравнить со всеми последующими
если одинаковые, то все последующие символы переписуем на единицу назад, и уменьшаем переменную каторая содержит количество символов в строке на 1. так вся строка переберется и удалит ненужные символы.
Skolos вне форума Ответить с цитированием
Старый 21.08.2015, 19:24   #3
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Вариант 1: делаем массив int cnt[256], проходимся по строке и делаем "cnt[buff[i]]++;", потом цикл по массиву cnt и вывод "cout << (char)i;" если cnt[i] > 1
Вариант 2: цикл по строке.. берём символ Х и повторно проходимся по строке в поиска второго такого ДО или ПОСЛЕ Х.... если нашли ДО, то не выводим, а если после, то выводим (тут два подцикла: от 0 до Х и от Х+1 до конца строки)
готовое решение решил не писать т. к. вы не ленивый и ещё часик сумеете подумать)
GreenWizard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на дублирующиеся записи MySQL g04 БД в Delphi 3 18.03.2011 14:31
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Дублирующиеся строки в DBGrid Talemir БД в Delphi 18 07.09.2009 23:50
Строки и символы 111111 Общие вопросы C/C++ 2 16.12.2008 18:18
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27