Приветствую Вас Гость | RSS

Язык программирования С

Суббота, 04.05.2024, 06:51
Главная » 2010 » Апрель » 8 » 1.9. Массивы символов. Упражнение 1.18.
18:06
1.9. Массивы символов. Упражнение 1.18.

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

/* программа для удаления лишних пробелов и табуляций */

#include "stdafx.h"
#define MAXLINE 1000 /* максимальная длина строки в потоке */

int getline(char line[], int maxline);

int main()
{

int len; /* длина текущей строки */
int i;
char line[MAXLINE]; /* текущая введенная строка */

while ((len = getline(line, MAXLINE)) > 0) {

--len; /* "выкидываем" нулевой символ '\0' */
/* если на конце строки есть пробел или табуляция,
"обрезаем" строку пока не встретим любой другой символ */

for (i = len - 1; i > 0; --i) {

if (line[i] == '\t' || line[i] == ' ')

--len;

else i = 0;

}
/* если строка непустая, выводим её */
if (len != 0) {

for (i = 0; i < len; ++i)

printf("%c", line[i]);

printf("\n");

}

}

return 0;

}

/* getline: считывает строку в s, возвращает ее длину */
int getline (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 и 1 в конце строки. Выглядит это вот так:

Удаление пробелов
Просмотров: 3318 | Добавил: brainfrog | Теги: строка, табуляция, программа, упражнение, пробел | Рейтинг: 0.0/0
Всего комментариев: 2
2 lionsay  
0
В моей книге упражнение выглядит так: Напишите программу, которая будет в каждой вводимой строке
заменять стоящие подряд символы пробелов и табуляций на один пробел и удалять пустые
строки.

1 lionsay  
0
Не знаю, вот мой код, сомневаюсь че то.
Код

#include <stdio.h>
#define MAXLINE 1000
#define IN 1
#define OUT 0

int gettline(char s[], int limit);

main()
{
  int len;
  char line[MAXLINE];
  char longest[MAXLINE];

  while((len = gettline(line, MAXLINE)) > 0){
  if(len > 1)
  printf("%s", line);
  }

  return 0;
}

int gettline(char s[], int limit)
{
  int i, c, state = OUT;
  for(i = 0; i < limit-1 && (c = getchar()) != EOF && c != '\n'; ++i){
  if(c == ' ' || c == '\t'){
  state = IN;
  if(i > 0)
  --i;
  }
  else {
  if(state == IN){
  s[i] = ' ';
  ++i;
  }
  s[i] = c;
  state = OUT;
  }
  }
  if (c == '\n'){
  s[i] = c;
  ++i;
  }
  s[i] = '\0';
  return i;
}

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]