Записать строку с удалением пробелов и символов табуляции с использованием функций - 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++];
Объяснение кода листинга программы
- Входная строка
s
передается в функцию. - Два вложенных цикла while используются для обработки строки.
- Внешний цикл while проверяет каждый символ в строке.
- Условие цикла while проверяет, является ли текущий символ пробелом или символом табуляции.
- Если текущий символ является пробелом или символом табуляции, то увеличивается индекс j.
- Если текущий символ не является пробелом, символом табуляции или нулевым символом, то он копируется во временную переменную s.
- Увеличивается индекс i, чтобы сохранить копированный символ в результирующей строке.
- Увеличивается индекс j, чтобы перейти к следующему символу во входной строке.
- Цикл продолжается до тех пор, пока не будет достигнут конец строки или не будет найден не пробельный, не табуляционный символ.
- Результирующая строка будет содержать только не пробельные, не табуляционные символы из входной строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д