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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2010, 19:05   #1
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию Замена во вводимой строке всех повторяющихся символов их восьмеричными представлениями и вывод результата

Цель программы: Замена во вводимой строке всех повторяющихся символов их восьмеричными представлениями и вывод результата.

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define StringSize 100

int main(void)
{
	char cString[StringSize];
	int iIndex1,iIndex2;

	gets(cString);

	for (iIndex1 = 0; iIndex1 < StringSize; iIndex1++)
	{
		if (cString[iIndex1] == 0)
			break;

		for(iIndex2 = iIndex1++; iIndex2 < StringSize; iIndex2++)
		{
			if (cString[iIndex2] == 0)
				break;

			if (cString[iIndex1] == cString[iIndex2])
			{
				cString[iIndex1] = 'z';
				cString[iIndex2] = 'z';
			}
		}
	}
	puts(cString);
	_getch();
	return 0;
}
Сначала я решил написать программу которая просто заменяет все повторяющиеся символы буквой z, но при выполнении второго цикла for меняются значения iIndex1 и iIndex2 из-за этого программа выводит полную ерунду, шожеделать?!
AquaticSoul вне форума Ответить с цитированием
Старый 07.03.2010, 19:30   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define StringSize 100

int main(void)
{
	char cString[StringSize];
	int iIndex1,iIndex2;
	bool flag;

	gets(cString);

	for (iIndex1 = 0; iIndex1 < StringSize; iIndex1++)
	{
		if (cString[iIndex1] == 0)
			break;
		flag = false;
		for(iIndex2 = iIndex1 + 1; iIndex2 < StringSize; iIndex2++)
		{
			if (cString[iIndex2] == 0)
				break;

			if (cString[iIndex1] == cString[iIndex2])
			{
				flag = true;
				cString[iIndex2] = 'z';
			}
		}
		if(flag)
			cString[iIndex1] = 'z';
	}
	puts(cString);
	_getch();
	return 0;
}
вот так будет правильно
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 07.03.2010, 22:26   #3
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию

А как теперь организовать замену повторяющихся симвлов их восьмеричными представлениями? а не буквой z?
AquaticSoul вне форума Ответить с цитированием
Старый 08.03.2010, 00:03   #4
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Цитата:
Сообщение от AquaticSoul Посмотреть сообщение
А как теперь организовать замену повторяющихся симвлов их восьмеричными представлениями? а не буквой z?
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define StringSize 100

char res[StringSize * 10];

void to8(char ch,int &pos)
{
	res[pos++] = '/';
	while(ch > 0)
	{
		res[pos++] = (ch % 8) + 48;
		ch /= 8;
	}
}

int main(void)
{
	char cString[StringSize],cString2[StringSize];
	int iIndex1,iIndex2;
	bool flag;

	gets(cString);

	for (iIndex1 = 0; iIndex1 < StringSize; iIndex1++)
	{
		if (cString[iIndex1] == 0)
			break;
		flag = false;
		for(iIndex2 = iIndex1 + 1; iIndex2 < StringSize; iIndex2++)
		{
			if (cString[iIndex2] == 0)
				break;

			if (cString[iIndex1] == cString[iIndex2])
			{
				flag = true;
				cString2[iIndex2] = '+';
			}
		}
		if(flag)
			cString2[iIndex1] = '+';
	}
	int pos = 0;
	for(int i = 0; i < strlen(cString); i ++)
	{
		if(cString2[i] != '+')
			res[pos++] = cString[i];
		else
			to8(cString[i],pos);
	}
	puts(res);
	_getch();
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 08.03.2010, 09:11   #5
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию

Ozerich, спасибо большое за помощь

только почему то он у меня восмеричный код переворачивает, то есть заместо /145 пишет /541

Последний раз редактировалось AquaticSoul; 08.03.2010 в 09:23.
AquaticSoul вне форума Ответить с цитированием
Старый 08.03.2010, 11:51   #6
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

вот так будет работать
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <vector>

using namespace std;

#define StringSize 100

char res[StringSize * 10];

void to8(char ch,int &pos)
{
	vector <char> ch8;
	int i;
	res[pos++] = '/';
	while(ch > 0)
	{
		ch8.push_back((ch % 8) + 48);
		ch /= 8;
	}
	for(i = ch8.size() - 1; i >= 0; i--)
		res[pos++] = ch8[i];
}

int main(void)
{
	char cString[StringSize],cString2[StringSize];
	int iIndex1,iIndex2;
	bool flag;

	gets(cString);

	for (iIndex1 = 0; iIndex1 < StringSize; iIndex1++)
	{
		if (cString[iIndex1] == 0)
			break;
		flag = false;
		for(iIndex2 = iIndex1 + 1; iIndex2 < StringSize; iIndex2++)
		{
			if (cString[iIndex2] == 0)
				break;

			if (cString[iIndex1] == cString[iIndex2])
			{
				flag = true;
				cString2[iIndex2] = '+';
			}
		}
		if(flag)
			cString2[iIndex1] = '+';
	}
	int pos = 0;
	for(int i = 0; i < strlen(cString); i ++)
	{
		if(cString2[i] != '+')
			res[pos++] = cString[i];
		else
			to8(cString[i],pos);
	}
	puts(res);
	_getch();
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена символов на слова в строке Shihmars Общие вопросы C/C++ 3 24.01.2010 18:51
TASM: Замена символов в строке. APTEMUC Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 18.01.2010 05:48
замена символов в строке euhenia Помощь студентам 3 30.11.2009 20:59
определение количества повторяющихся элементов в строке Alex Cones Общие вопросы Delphi 15 09.08.2009 18:55
Вывод символов в строке Karl_Karlovi4 БД в Delphi 12 03.06.2008 13:31