Преобразовать символы конца строки и табуляции в управляющие последовательности - C (СИ)
Формулировка задачи:
Задание: написать функцию escape(s, t), которая бы преобразовывала символы наподобии конца строки и табуляции в управляющие последовательности, такие как \n и \t.
Написать также функцию esc(s, t) для противоположной операции - преобразования символических управляющих последовательностей в фактические управляющие символы.
Первая функция:
вместо \n и.т.д. выводятся символы - ���.
Вторая функция:
не компилируется с ошибкой: error: case label does not reduce to an integer constant в строке
как исправить обе функции?
void escape(char s[], char t[]) { int i; int j = 0; for (i = 0; s[i]!= '\0'; i++) { switch (s[i]) { case '\n': t[j] = "\\"; j++; t[j] = "n"; j++; break; case '\t': t[j] = "\\"; j++; t[j]= "t"; j++; break; default: t[j] = s[i]; j++; break; } }; }
void esc(char s[], char t[]) { int i; int j; for(i = 0; i != '\0'; i++) { switch (s[i]) { case "\\": switch (s[i+1]){ case "t": t[j] = '\t'; j++; break; case "n": t[j] = '\n'; j++; break; default: t[j] = "\\"; }; break; default: t[j] = s[i]; j++; break; } }
case "\\":
Решение задачи: «Преобразовать символы конца строки и табуляции в управляющие последовательности»
textual
Листинг программы
void escape(char s[], char t[]) { int i; int j = 0; for (i = 0; s[i]!= '\0'; i++) { switch (s[i]) { case '\n': t[j] = '\\'; j++; t[j] = 'n'; j++; break; case '\t': t[j] = '\\'; j++; t[j]= 't'; j++; break; default: t[j] = s[i]; j++; break; } }; }
Объяснение кода листинга программы
- В функции объявлены две переменные:
i
(указатель на текущий символ в исходной строке) иj
(указатель на текущий символ в результирующей строке). Значениеj
инициализируется нулем. - В цикле
for
происходит проход по всем символам исходной строки до тех пор, пока не встретится символ конца строки. - Для каждого символа исходной строки выполняется проверка его значения с помощью оператора
switch
. - В случае, если символ равен
\n
(символ конца строки), в результирующую строку записываются две символьные последовательности:\\n
(обратная кодировка символа конца строки) иn
(символ конца строки). Значение указателяj
увеличивается на два. - В случае, если символ равен
\t
(табуляция), в результирующую строку записываются две символьные последовательности:\\t
(обратная кодировка символа табуляции) иt
(символ табуляции). Значение указателяj
увеличивается на два. - В случае, если символ не равен ни
\n
, ни\t
, в результирующую строку записывается сам символ без изменений. Значение указателяj
увеличивается на один. - После окончания цикла
for
в результирующей строке остается столько символов, сколько было в исходной строке минус два (так как для символа конца строки и табуляции в результирующей строке записаны две последовательности символов). - Функция возвращает ничего не возвращает (типа
void
).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д