Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
SadiQ228
-18 / 10 / 7
Регистрация: 16.12.2016
Сообщений: 460
1

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

13.01.2017, 15:28. Просмотров 362. Ответов 2
Метки нет (Все метки)

Прошу помощи и детального ( по возможности разбора полетов )
Программа выводит строки где больше 10 символов, удаляя при этом повторяющиеся знаки пробелов и табулиций.

С пробелами работает:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#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;
}


Однако как тока в условия дописываем знак табуляции прога перестает работать :

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#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;
}
Добавлено через 4 минуты
понял ошибку впринципе тему можно закрыть
C
1
if ((line[i] == ' ') && (line[i+1] == ' ') || (line[i] == '\t') && (line[i+1] == '\t'))
вот такое условие будет верным

Добавлено через 10 минут
только вот не могу понять как потом даже один символ табуляции превратить в пробел на выходе?
конструкция типо
if (line[i] == '\t')
line[i] = ' ';
чет не работает
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2017, 15:28
Ответы с готовыми решениями:

Лишние пробелы и табуляции
доброго времени суток! преподаватель говорил о расхождении значений i и j, после которого формула...

Заменить символы табуляции на пробелы
Вот Напишите программу detab, которая бы заменяла символы табуляции во входном потоке...

Некорректно работает программа на С/С++
Запускается программа вот её код #define _CRT_SECURE_NO_WARNINGS #include &lt;windows.h&gt; #include...

Некорректно работает программа на С
Все примеры из учебника используют переменные типа int но мне приходится использовать переменные...

Некорректно работает программа на С/С++
Программа написанная на С++ должна вычислять факториал числа а в итоге не делает ничего кроме как...

2
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
13.01.2017, 15:59 2
Цитата Сообщение от SadiQ228 Посмотреть сообщение
if ((line[i] == ' ' || '\t') && (line[i+1] == ' ' || '\t')){
C
1
if ((line[i] == ' ' || line[i] ==  '\t') && (line[i+1] == ' ' || line[i+1] == '\t')){
ошибка синтаксическая,в код не вникал
0
SadiQ228
-18 / 10 / 7
Регистрация: 16.12.2016
Сообщений: 460
13.01.2017, 16:01  [ТС] 3
готовый вариант выслушаю предложения

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2017, 16:01

Убрать начальные и конечные пробелы и табуляции
Друзья, все вроде как работает, но хотелось бы услышать советы по оптимизации и придаче красоты...

Во вводимом с клавиатуры тексте удалить все пробелы, знаки табуляции
Нужно написать программу, которая во вводимом с клавиатуры тексте удалит все пробелы, знаки...

Программа, удаляющая лишние пробелы
На просторах форума столкнулся с программой по удалению лишних пробелов, объясните пожалуйста...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru