K&R (73). Замена управляющих символов обычными и наоборот
Опубликовано plustilino в Апрель 18, 2012 - 13:50. Changed Апрель 18, 2012 - 14:08
Решение задач на языке программирования C
Ответ к упражнению 3.2.
Замена управляющих последовательностей обычными символами
#include <stdio.h> #define MAX 1000 void escape (char s[], char s1[]); main () { char str[MAX], str1[MAX]; int i, c; for (i = 0; (c = getchar()) != EOF; ++i) str[i] = c; escape (str1, str); printf("%s\n", str1); } void escape (char to[], char from[]) { int i, k; i = k = 0; while (from[i] != '\0') { switch (from[i]) { case '\n': to[k++] = '\\'; to[k++] = 'n'; break; case '\t': to[k++] = '\\'; to[k++] = 't'; break; default: to[k++] = from[i]; break; } ++i; } to[k] = '\0'; }
Примечание. Используется постфиксная форма инкремента (k++). В этом случае k сначала используется и только потом увеличивается на единицу.
При выводе измененной строки появляются странные "артефакты" в конце.
Замена пар символов "\n" и "\t" управляющими последовательностями
#include <stdio.h> #define MAX 1000 void escape (char s[], char s1[]); main () { char str[MAX], str1[MAX]; int i, c; for (i = 0; (c = getchar()) != EOF; ++i) str[i] = c; escape (str1, str); printf("%s\n", str1); } void escape (char to[], char from[]) { int i, k; i = k = 0; while (from[i] != '\0') { if (from[i] == '\\' && from[i+1] == 'n') { to[k++] = '\n'; i += 2; } else if (from[i] == '\\' && from[i+1] == 't') { to[k++] = '\t'; i += 2; } else to[k++] = from[i++]; } to[k] = '\0'; }
Последние комментарии
2 дня 3 часа назад
3 дня 10 минут назад
4 дня 25 минут назад
6 дней 16 часов назад
1 неделя 4 часа назад
1 неделя 2 дня назад
2 недели 1 день назад
2 недели 1 день назад
2 недели 6 дней назад
3 недели 5 часов назад