Преобразовать символы конца строки и табуляции в управляющие последовательности - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задание: написать функцию escape(s, t), которая бы преобразовывала символы наподобии конца строки и табуляции в управляющие последовательности, такие как \n и \t. Написать также функцию esc(s, t) для противоположной операции - преобразования символических управляющих последовательностей в фактические управляющие символы. Первая функция:
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;
 
        }
 
    };
 
}
вместо \n и.т.д. выводятся символы - ���. Вторая функция:
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;
    }
 
}
не компилируется с ошибкой: error: case label does not reduce to an integer constant в строке
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;
        }
    };
}

Объяснение кода листинга программы

  1. В функции объявлены две переменные: i (указатель на текущий символ в исходной строке) и j (указатель на текущий символ в результирующей строке). Значение j инициализируется нулем.
  2. В цикле for происходит проход по всем символам исходной строки до тех пор, пока не встретится символ конца строки.
  3. Для каждого символа исходной строки выполняется проверка его значения с помощью оператора switch.
  4. В случае, если символ равен \n (символ конца строки), в результирующую строку записываются две символьные последовательности: \\n (обратная кодировка символа конца строки) и n (символ конца строки). Значение указателя j увеличивается на два.
  5. В случае, если символ равен \t (табуляция), в результирующую строку записываются две символьные последовательности: \\t (обратная кодировка символа табуляции) и t (символ табуляции). Значение указателя j увеличивается на два.
  6. В случае, если символ не равен ни \n, ни \t, в результирующую строку записывается сам символ без изменений. Значение указателя j увеличивается на один.
  7. После окончания цикла for в результирующей строке остается столько символов, сколько было в исходной строке минус два (так как для символа конца строки и табуляции в результирующей строке записаны две последовательности символов).
  8. Функция возвращает ничего не возвращает (типа void).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5
Похожие ответы