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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2012, 18:40   #1
Chelovekpredel
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 33
По умолчанию Проблема с программой в си. Оператор switch.

Для начала сама задача:
Напишите функцию escape(s, t), которая при копи-
ровании текста из t в s преобразует такие символы, как новая строка
и табуляция в "видимые последовательности символов" (вроде \л и \t).
Используйте инструкцию switch. Напишите функцию, выполняющую
обратное преобразование эскейп-последовательностей в настоящие
символы.

Вроде сделал, но мне ничего не выводит.
Вот и мой НЕРАБОТАЮЩИЙ код:
Код:
#include "stdafx.h"
#include <stdio.h>

void escape( char t[], char s[]);

int _tmain(int argc, _TCHAR* argv[])
{
	char s[100],t[100],c;
	int p=0;
	while ((c=getchar())!='0')
		t[p++]=c;
	escape(t,s);
	getchar();
	return 0;
}

void escape (char t[],char s[])
{
	int i=0,j=0,k=0;
	while (t[i]!='\0')
	{
		switch (t[i]) 
		{
		case '\n':
			s[j]='\\';
			s[j+1]='n';
			++j;
			break;
		case '\t':
			s[j]='\\';
			s[j+1]='t';
			++j;
			break;
		default:
			s[j]=t[i];
			break;
		}
		++i;
		++j;
	}
	s[j]='\0';
	printf("%s\n",s);
}
Укажите, пожалуйста, мои ошибки и помогите прояснить ситуацию. Заранее спасибо.
Chelovekpredel вне форума Ответить с цитированием
Старый 17.06.2012, 19:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Подсказываю:
Код:
// f.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"

char* escape(char* s){
	int i,k=0;
	for(i=0;s[i];i++){
		if(s[i]=='\t' || s[i]=='\n') k++; k++;
	};
	char* c=new char[k+2];
	k=0;
	for(i=0;s[i];i++){
		switch(s[i]){
			case '\t':{c[k++]='\\';c[k++]='t';i++;}
			case '\n':{c[k++]='\\';c[k++]='n';i++;}
			default: c[k++]=s[i];
		}
	};
	c[k]=0;
	return c;
}

int _tmain(int argc, _TCHAR* argv[])
{
	char s[]="hello\n wotld \t\0";
	printf("%s\n\n%s",s,escape(s));
	getchar();
	return 0;
}
ТОлько тут стоит сначала присвоить результат escape какой-нить переменке, чтоб потом была возможность убрать мусор
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2012, 19:55   #3
Chelovekpredel
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 33
По умолчанию

Можешь мне ошибки в моей программе указать. Меня именно мой метод интересует.
Chelovekpredel вне форума Ответить с цитированием
Старый 17.06.2012, 21:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Полагаю самая главная ошибка тут:
Цитата:
s[j+1]='n';
++j;
Я бы писал так:
Код:
			s[++j]='n';
			++j;
Потому что ты на следующей итерации затираешь символ после \
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ оператор SWITCH Ramina Помощь студентам 10 05.02.2012 19:32
switch оператор Alex-Kunfuman Общие вопросы C/C++ 28 22.01.2012 04:42
C++ оператор switch Pingvinenok_Lolo Помощь студентам 4 05.12.2011 23:11
оператор switch aank10 Общие вопросы C/C++ 3 01.06.2011 10:28
Оператор switch. IgorArhangel Помощь студентам 4 16.01.2009 01:53