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

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

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

Не работает функция delspace.
Листинг программы
  1. #include <stdio.h>
  2. #define LIM 1000 // предел длины строки
  3.  
  4. int get_line(char fixed_line[], int lim); //сохраняет строку в массив, возвращает длину строки
  5. void copy(char to[], char from[]); // копирует одну строку в другую
  6. void delspace(char a[], int len); // функция удаления из строки лишних пробелов и табуляций
  7. int main()
  8. { int len; // текущая длина строки
  9. char current_line[LIM]; // текущая записанная строка
  10. char fixed_line[LIM]; // измененная строка на вывод
  11.  
  12. while((len = get_line(current_line, LIM))) // пока мы считываем входной поток
  13. { if(len > 1)
  14. { copy(fixed_line, current_line); // скопировать строку вводу в наш массив
  15. delspace(fixed_line, len); // удаляем пробелы и знаки табуляции в строке
  16. printf("%s\n", fixed_line); // написать строку
  17. }
  18. }
  19. return 0;
  20. }
  21. /* get_line-считывание строки в массив, возврат ее длины */
  22. int get_line(char s[], int lim)
  23. { int i = 0;
  24. char c;
  25. for(i = 0; i < lim - 1 && (c = getchar()) != '\n' && c != EOF; ++i)
  26. { s[i] = c;
  27. }
  28. if(c == '\n')
  29. { s[i] = c;
  30. ++i;
  31. }
  32. s[i] = '\0';
  33. return i;
  34. }
  35. /* copy-копирование строки from в to */
  36. void copy(char to[], char from[])
  37. { int i = 0;
  38. while((to[i] = from[i]) != '\0')
  39. { ++i;
  40. }
  41. }
  42. /* delete_space удаление пробелов и знаков табуляции в строке */
  43. void delspace(char a[], int length)
  44. {
  45. int i;
  46. for(i = 0; i < length; ++i)
  47. { if(a[i] == ' ' || a[i] == '\t')
  48. { putchar('\b');
  49. }
  50. }
  51. }
переписал функцию, но в выводе иногда дописывает элементы в количестве равные количеству пробелов.
Листинг программы
  1. /* delete_space удаление пробелов и знаков табуляции в строке */
  2. void delspace(char a[], int length)
  3. {
  4. int i;
  5. int j;
  6. char lineout[1000];
  7. for(i = 0, j = 0; i < length; ++i)
  8. { if(a[i] != ' ' && a[i] != '\t')
  9. { lineout[j] = a[i];
  10. ++j;
  11. }
  12. else
  13. { putchar('\b');
  14. }
  15. }
  16. for(i = 0; i < length; ++i)
  17. { a[i] = lineout[i];
  18. }
  19. }

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

textual
Листинг программы
  1. while(s[j] == ' ' || s[j] == '\t')
  2.             j++;
  3.         while(s[j] != ' ' && s[j] != '\t' && s[j])
  4.             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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы