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

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

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

Прошу помощи и детального ( по возможности разбора полетов ) Программа выводит строки где больше 10 символов, удаляя при этом повторяющиеся знаки пробелов и табулиций. С пробелами работает:
#include <stdio.h>
#define MAXLINE 10000
#define STR 10
int getstr(char line[], int maxline);
 
main()
{
  int len;                                     // длина текущей строки
  char line [MAXLINE];                        // текущая строка
  while ((len = getstr(line, MAXLINE)) > 0)
    if (len > STR){
        for (int i = 0; i < MAXLINE; i++){
            if ((line[i] == ' ') && (line[i+1] == ' ')){
                for (int j = i; j < MAXLINE; j++)
                  line[j] = line[j+1];
                i--;
              }
          }
        printf ("%s \n", line);
      }
  return 0;
}
 
int getstr (char s[], int lim)
{
  int c ,i;
  for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i )
    s[i] = c;
  if(c == '\n'){
      s[i] = c;
      ++i;
    }
  s[i] = '\0';
  return i;
}
Однако как тока в условия дописываем знак табуляции прога перестает работать :
#include <stdio.h>
#define MAXLINE 10000
#define STR 10
int getstr(char line[], int maxline);
 
main()
{
  int len;                                     // длина текущей строки
  char line [MAXLINE];                        // текущая строка
  while ((len = getstr(line, MAXLINE)) > 0)
    if (len > STR){
        for (int i = 0; i < MAXLINE; i++){
            if ((line[i] == ' ' || '\t') && (line[i+1] == ' ' || '\t')){
                for (int j = i; j < MAXLINE; j++)
                  line[j] = line[j+1];
                i--;
              }
          }
        printf ("%s \n", line);
      }
  return 0;
}
 
int getstr (char s[], int lim)
{
  int c ,i;
  for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i )
    s[i] = c;
  if(c == '\n'){
      s[i] = c;
      ++i;
    }
  s[i] = '\0';
  return i;
}
понял ошибку впринципе тему можно закрыть
if ((line[i] == ' ') && (line[i+1] == ' ') || (line[i] == '\t') && (line[i+1] == '\t'))
вот такое условие будет верным
только вот не могу понять как потом даже один символ табуляции превратить в пробел на выходе? конструкция типо if (line[i] == '\t') line[i] = ' '; чет не работает

Решение задачи: «Программа, удаляющая повторяющиеся пробелы и табуляции (работает некорректно)»

textual
Листинг программы
#include <stdio.h>
#define MAXLINE 10000
#define STR 10
int getstr(char line[], int maxline);
 
main()
{
  int len;                                     // длина текущей строки
  char line [MAXLINE];                        // текущая строка
  while ((len = getstr(line, MAXLINE)) > 0)
    if (len > STR){
        for (int i = 0; i < MAXLINE; i++){
            if (line[i] == '\t'){
                line[i] = ' ';
                --i;
              }
            if ((line[i] == ' ') && (line[i+1] == ' ')){
                for (int j = i; j < MAXLINE; j++)
                  line[j] = line[j+1];
                i--;
              }
          }
        printf ("%s \n", line);
      }
  return 0;
}
 
int getstr (char s[], int lim)
{
  int c ,i;
  for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i )
    s[i] = c;
  if(c == '\n'){
      s[i] = c;
      ++i;
    }
  s[i] = '\0';
  return i;
}

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


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

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

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