Я собираюсь написать программу на C, которая переписывает строку t в переменные s и преобразует символы, такие как новая строка, табуляция, в управляющие последовательности, такие как \ n, \ t.Затем мне нужно написать функцию, которая выполняет обратную операцию - преобразует управляющие последовательности в правильные символы.
Вот мой код:
#include <stdio.h>
#define LIMIT 50
void escape(char * s, const char * t);
void bumpInto(char * s, const char * t);
int main(void) {
const char s1[LIMIT] = "Ala\nma\tkota.";
char s2[LIMIT];
char s3[LIMIT];
printf("%s\n", s1);
escape(s2, s1);
printf("%s\n", s2);
bumpInto(s3, s2);
printf("%s\n", s3);
return 0;
}
void escape(char * s, const char * t) {
while (*t) {
switch (*t) {
case '\n':
*s = '\\';
++s;
*s = 'n';
break;
case '\t':
*s = '\\';
++s;
*s = 't';
break;
default:
*s = *t;
break;
}
++s;
++t;
}
}
void bumpInto(char * s, const char * t) {
char prev = 0;
while (*t) {
if (prev == '\\') {
switch (*t) {
case 'n':
--s;
*s = '\n';
break;
case 't':
--s;
*s = '\t';
break;
}
}
// if (prev != '\\' && *t != '\\')
*s = *t;
putchar(*s);
prev = *t;
++s;
++t;
}
}
У меня есть результаты:
Alanmatkota.@
вместо ожидаемого:
Ala
ma kota.
У меня проблема с записью функции bumpInto, которая выполняет обратную операцию, а не escape, в частности, преобразовывает управляющие последовательности в правильные символы.Может кто-нибудь сделать предложения, как это сделать?