Записать строку с удалением пробелов и символов табуляции с использованием функций - C (СИ)

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

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

Не работает функция delspace.
#include <stdio.h> 
#define LIM 1000 // предел длины строки

int get_line(char fixed_line[], int lim); //сохраняет строку в массив, возвращает длину строки
void copy(char to[], char from[]); // копирует одну строку в другую
void delspace(char a[], int len); // функция удаления из строки лишних пробелов и табуляций
 
int main()
{   int len; // текущая длина строки
    char current_line[LIM]; // текущая записанная строка
    char fixed_line[LIM]; // измененная строка на вывод

    while((len = get_line(current_line, LIM))) // пока мы считываем входной поток
    {   if(len > 1)
        {   copy(fixed_line, current_line); // скопировать строку вводу в наш массив
            delspace(fixed_line, len); // удаляем пробелы и знаки табуляции в строке
            printf("%s\n", fixed_line); // написать строку
        }
        
    }
return 0;
}
/* get_line-считывание строки в массив, возврат ее длины */
int get_line(char s[], int lim)
{   int i = 0; 
    char c;
  
    for(i = 0; i < lim - 1 && (c = getchar()) != '\n' && c != EOF; ++i)
    {   s[i] = c;
    }
    
    if(c == '\n')
    {   s[i] = c;
        ++i;    
    }
    s[i] = '\0';
    return i;
}   
/* copy-копирование строки from в to */
void copy(char to[], char from[])
{   int i = 0;
 
    while((to[i] = from[i]) != '\0')
    {   ++i;
    }
}
/* delete_space удаление пробелов и знаков табуляции в строке */
void delspace(char a[], int length)
{
    int i;
    for(i = 0; i < length; ++i)
    {   if(a[i] == ' ' || a[i] == '\t')
        {   putchar('\b');
        }
 
    }
}
переписал функцию, но в выводе иногда дописывает элементы в количестве равные количеству пробелов.
/* delete_space удаление пробелов и знаков табуляции в строке */
void delspace(char a[], int length)
{
    int i; 
    int j;
    char lineout[1000];
 
        for(i = 0, j = 0; i < length; ++i)
        {   if(a[i] != ' ' && a[i] != '\t')
            {   lineout[j] = a[i];
                ++j;
            }
            else
            {   putchar('\b');
            }
    }
    for(i = 0; i < length; ++i)
    {   a[i] = lineout[i];
    }   
}

Решение задачи: «Записать строку с удалением пробелов и символов табуляции с использованием функций»

textual
Листинг программы
while(s[j] == ' ' || s[j] == '\t')
            j++;
        while(s[j] != ' ' && s[j] != '\t' && s[j])
            s[i++] = s[j++];

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

  1. Входная строка s передается в функцию.
  2. Два вложенных цикла while используются для обработки строки.
  3. Внешний цикл while проверяет каждый символ в строке.
  4. Условие цикла while проверяет, является ли текущий символ пробелом или символом табуляции.
  5. Если текущий символ является пробелом или символом табуляции, то увеличивается индекс j.
  6. Если текущий символ не является пробелом, символом табуляции или нулевым символом, то он копируется во временную переменную s.
  7. Увеличивается индекс i, чтобы сохранить копированный символ в результирующей строке.
  8. Увеличивается индекс j, чтобы перейти к следующему символу во входной строке.
  9. Цикл продолжается до тех пор, пока не будет достигнут конец строки или не будет найден не пробельный, не табуляционный символ.
  10. Результирующая строка будет содержать только не пробельные, не табуляционные символы из входной строки.

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


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

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

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