На главную страницу

Решения к упражнениям из книги "Язык программирования С" Б. Керниган и Д. Ритчи

Упражнение 3.2.


Напишите функцию escape(s,t), которая бы преобразовывала символы наподобие конца строки и табуляции в управляющие последовательности языка C, такие как \n и \t, в процессе копирования строки t в строку s. Воспользуйтесь оператором switch. Напишите функцию также и для противоположной операции - преобразования символических управляющих последовательностей в фактические управляющие символы.
----------
/* Exercise 3.2 from "The c programming language" book by K&R */

#include <stdio.h>

/* transform <TAB> or <CR> in s[] to "\t" or "\n" and put result into t[] */
void escape(char s[], char t[])
{
	int i = 0;
	int k = 0;
	while (t[i] != '\0')
		switch (t[i++]) {
			case '\t':
				s[k++] = '\\';
				s[k++] = 't';
				break;
			case '\n':
				s[k++] = '\\';
				s[k++] = 'n';
				break;
			default:
				s[k++] = t[i-1];
				break;
		}
	s[k] = '\0';
}

/* transform "\t" or "\n" in s[] to <TAB> or <CR> and put result into t[] */
void unescape(char s[], char t[])
{
	int i = 0;
	int k = 0;
	while (t[i] != '\0')
		if (t[i++] == '\\')
			switch (t[i++]) {
				case 't':
					s[k++] = '\t';
					break;
				case 'n':
					s[k++] = '\n';
					break;
				default:
					s[k++] = t[i-2];
					s[k++] = t[i-1];
					break;
			}
		else
			s[k++] = t[i-1];
	s[k] = '\0';
}

int main(void)
{
	char s[100] = "";
	char t1[] = "ab		st";
	char t2[] = "ab\tst";
	
	escape(s,t1);
	printf("%s\n",s);
	unescape(s,t2);
	printf("%s\n",s);
	return 0;
}
	
----------
Работа программы в системе Linux:


Последнее изменение: 23 май 2011