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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 18:58   #1
decantnik
Пользователь
 
Аватар для decantnik
 
Регистрация: 15.10.2008
Сообщений: 36
Радость [C] Удаление одинаковых символов со строки

Добрый вечер. Есть задача:
Код HTML:
  Нужно удалить похожие символы со строки.
  Пример
  вход:  aaaaaaaaabcccd      
  выход: abcd
Задача тривиальная, но у меня возникли проблемы. Как и в паскале я решил сравнивать со следующим элементов и удалять тогда, однако я заметил что в Си не работает конструкция [i+1]. Это у меня не работает или я что-то не так делаю?
decantnik вне форума Ответить с цитированием
Старый 15.12.2011, 19:11   #2
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Вы делаете что-то не так. Покажите код, где не работает. Скорее всего, у вас выход за границы массива.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 15.12.2011, 20:31   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Код:
int main(int argc, char* argv[])
{
char str[256]; // память для строки

cin >> str; // принимаем строку

int i=0;
while (str[i+1]!='\0') // пока не конец строки
{
    if (str[i] == str[i + 1]) // если текущий похож на следующий
             for (int x=0;(x<256 && str[x]!='\0');x++) 
                        str[i+x+1] = str[i+x+2]; // удаляем следующий
    else i++; // если не похож переходим на него

}
cout << str; // показываем 
getch(); // ждем реакции пользователя
return 0;
}
Вот рабочий код
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 15.12.2011, 21:11   #4
decantnik
Пользователь
 
Аватар для decantnik
 
Регистрация: 15.10.2008
Сообщений: 36
По умолчанию

Да, я что-то затупил.
Код:
#include <stdio.h>
#include <locale.h>
#include <string.h>

int main(int argc, char *argv[])
{
  setlocale (LC_ALL,"");
    char str[100];
printf("Введите строку: "); gets(str);
int size_str=strlen(str);
	for (int i=0; i<size_str; i++)
	{
		if (str[i]==str[i+1])
		{
			for (int j=i; j<size_str; j++)
				{
                                      str[j]=str[j+1];
			}
			size_str--;
		}
	}
	puts(str);
    return 0;
}
но все равно оно работает не для всех случаев
decantnik вне форума Ответить с цитированием
Старый 15.12.2011, 21:36   #5
decantnik
Пользователь
 
Аватар для decantnik
 
Регистрация: 15.10.2008
Сообщений: 36
По умолчанию

WorldMaster, шик, спасибо!
decantnik вне форума Ответить с цитированием
Старый 31.08.2013, 22:02   #6
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	char s[] = "aaaaaaaaabcccd";
	cout << "Stroka imeet vid: ";
	cout << s;
	cout << "\n\nPosle udalenia imeem: ";
	for(int i = 0; i < strlen(s); i++)
	{
		bool b = true;
		for(int j = i + 1; j < strlen(s); j++)
		{
			if(s[i] == s[j])
				b = false;
		}
		if(b)
			cout << s[i];
	}
	_getch();
	return 0;
}
помог - жми на весы
Chainik! вне форума Ответить с цитированием
Старый 01.09.2013, 00:37   #7
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <stdio.h>



char* s_unique(char* s) {
    char* p1, *p2;
    for(p1 = p2 = s; *p1; *p1 = *p2) {
        if(*p2 != *(p2 + 1))
            ++p1;
        ++p2;
    }
    return s;
}



int  main(void) {
  char s[] = "aaaaaaaaabcccdddddd";
  puts( s_unique(s) );
  return 0;
}
http://codepad.org/O6Yz1ydr
Nuklon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление слова с максимальным кол-вом одинаковых символов(c++) Натаниэль Помощь студентам 1 30.10.2011 18:05
Удаление символов из строки NAS1977mu Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 09.01.2011 13:05
Удаление одинаковых символов из массива maxflint Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 09.05.2010 13:18
Удаление символов из строки Jasper92 Общие вопросы C/C++ 1 17.01.2010 20:41
Удаление символов из строки stscolt Помощь студентам 0 28.12.2009 12:34