Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пустые строки / 17 сообщений из 17, страница 1 из 1
28.06.2007, 15:34
    #34626454
serakuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
Здравствуйте!!!
Это задачка из учебника, нужно удолять пустые строки:
Код: cpp
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include <stdio.h>
#include <conio.h>
main()
{
  clrscr();
  int c, i = 0;
  while ((c = getchar()) != EOF)
  {
    if (c =='\n')
    {
      if (i == 1)
      {
	putchar('\n');
	++i;
      }
    }
    else
    {
      putchar(c);
      i = 0;
    }
  }
  getchar();
}


Подскажите что нитак?
...
Рейтинг: 0 / 0
28.06.2007, 15:42
    #34626486
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
serakuz wrote:

> Подскажите что нитак?
Для чего переменная i? она всегда будет равна нулю.
Проще
Код: plaintext
1.
2.
if ((c != '\n')&&(c != '\r'))//для Win32.
        putchar(c);
А ещё лучше использовать fgets.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.06.2007, 15:54
    #34626532
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
serakuzЗдравствуйте!!!
Это задачка из учебника, нужно удолять пустые строки:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include <stdio.h>
#include <conio.h>
main()
{
  clrscr();
  int c, i =  0 ;
  while ((c = getchar()) != EOF)
  {
    if (c =='\n')
    {
      if (i ==  1 )
      {
	putchar('\n');
	++i;
      }
    }
    else
    {
      putchar(c);
      i =  0 ;
    }
  }
  getchar();
}

Подскажите что нитак?

Я бы выводил перенос строки, если i==0, а после этого устанавливал i в 1 (инициализировать i надо тоже в 1). А здесь сравнение i==1 мне вообще не понятно.
...
Рейтинг: 0 / 0
28.06.2007, 16:51
    #34626751
serakuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
int c, i = 1;
while ((c = getchar()) != EOF)
{
if (c =='\n')
{
if (i == 0)
{
putchar(c);
i++;
}
}
else
{
putchar(c);
i = 1;
}

}
getchar();
}
Все равно при нажатии на Ентер переходит на новую строку
...
Рейтинг: 0 / 0
28.06.2007, 17:14
    #34626865
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
serakuzВсе равно при нажатии на Ентер переходит на новую строку

После вывода интера установить в 1 .

Т.е. 1 это значит, что только что выводили \n, 0 - только что выводили символ. Поэтому при получении \n, проверяем, если выводили символ, то выводим \n и ставим флаг в 1, если выводили \n, то ничего не делаем. При получении ! \n, ничего не проверяем, просто выводим символ, и отмечаем, что только что выводили символ.

Ну, а теперь запрограммируй это. ;)
...
Рейтинг: 0 / 0
28.06.2007, 17:17
    #34626877
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
Что она должна делать?
...
Рейтинг: 0 / 0
28.06.2007, 17:45
    #34626988
serakuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
Это задача с учебника:
Напишите программу, которая будет в каждой вводимой строке заменять стоящие подряд символы пробелов и табуляций на один пробел и удалять пустые строки.
с пробелами и с табуляцией мне все понятно но с пустыми строками тупик.
...
Рейтинг: 0 / 0
28.06.2007, 18:07
    #34627071
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
serakuzЭто задача с учебника:
Напишите программу, которая будет в каждой вводимой строке заменять стоящие подряд символы пробелов и табуляций на один пробел и удалять пустые строки.
с пробелами и с табуляцией мне все понятно но с пустыми строками тупик.

Код: plaintext
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.
40.
41.
42.
	char	str[ 256 ];
	char	res[ 256 ];
	char	*ptr_res;	// устанавливаю указатель на res
	bool	bl_space;
	size_t	len;

	while (true)
	{
		ptr_res = res;
		printf("\nInput next string (empty string for exit):\n");
		fgets(str,  256 , stdin);	// читает строку контролируя ее дину (чтобы не выйти за размер массива) вместе с '\n'
		
		len = strlen(str);
		str[len--] = '\0';	// убираю символ '\n'
			
		if ( 0  == len)
		{
			break;	// ввели пустую строку ЗДЕСЬ МОЖЕШЬ СДЕЛАТЬ ВСЕ ЧТО ХОЧЕШЬ С ПУСТОЙ СТРОКОЙ
		}// if

		bl_space = false;

		for (size_t i =  0 ; i < len; i++)
		{
			if ( isspace(str[i]) )
			{
				if (!bl_space)// если пробела небыло, то ставлю его
					*ptr_res++ = ' '; 
				
				bl_space = true;	// поднимаю флаг - последний добавленный символ - пробел
			}
			else
			{
				*ptr_res++ = str[i];
				bl_space = false;	// был обычный символ - флаг опущен
			}
		}// for
		

		*ptr_res = '\0'; // конец строки
		printf("\nResult = '%s'\n", res);
	}// while
...
Рейтинг: 0 / 0
28.06.2007, 18:22
    #34627112
serakuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
...
Рейтинг: 0 / 0
28.06.2007, 18:23
    #34627117
serakuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
Пардон эта задача из первой главы.
Я таких высот пока непонимайт.
...
Рейтинг: 0 / 0
28.06.2007, 18:27
    #34627124
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
serakuzПардон эта задача из первой главы.
Я таких высот пока непонимайт.

каких высот? ты си уже полгода изучаешь
...
Рейтинг: 0 / 0
28.06.2007, 18:31
    #34627137
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
Код: plaintext
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.
40.
41.
42.
	char	str[ 256 ];
	char	res[ 256 ];
	//char	*ptr_res;	// устанавливаю указатель на res -  ВЫСОТЫ БОЛЬШЕ НЕТ
	bool	bl_space;
	size_t	len;

	while (true)
	{
		printf("\nInput next string (empty string for exit):\n");
		fgets(str,  256 , stdin);	// читает строку контролируя ее дину (чтобы не выйти за размер массива) вместе с '\n'
		
		len = strlen(str);
		str[len--] = '\0';	// убираю символ '\n'
			
		if ( 0  == len)
		{
			break;	// ввели пустую строку ЗДЕСЬ МОЖЕШЬ СДЕЛАТЬ ВСЕ ЧТО ХОЧЕШЬ С ПУСТОЙ СТРОКОЙ
		}// if

		bl_space = false;
		int	j =  0 ;

		for (size_t i =  0 ; i < len; i++)
		{
			if ( isspace(str[i]) )
			{
				if (!bl_space)// если пробела небыло, то ставлю его
					res[j++] = ' '; 
				
				bl_space = true;	// поднимаю флаг - последний добавленный символ - пробел
			}
			else
			{
				res[j++] = str[i];
				bl_space = false;	// был обычный символ - флаг опущен
			}
		}// for
		

		res[j++] = '\0'; // конец строки
		printf("\nResult = '%s'\n", res);
	}// while
...
Рейтинг: 0 / 0
28.06.2007, 18:32
    #34627141
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
serakuz wrote:

> Я таких высот пока непонимайт.
Нету там "высот".
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.06.2007, 18:46
    #34627172
serakuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
все нужно на Turbo C.
...
Рейтинг: 0 / 0
28.06.2007, 18:58
    #34627183
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
serakuzвсе нужно на Turbo C.

а что тут не из турбо си?

может разве что тип bool, я не помню, тогда молча поменяй

bool bl_space; на int bl_space;

false на 0, а true на 1

и тип size_t на int, если он тебе не нравится

готовое уже даешь, а ему телодвижение лень совершить
...
Рейтинг: 0 / 0
28.06.2007, 19:36
    #34627236
serakuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
ВСЕ работает ОК!
Большое спасибо.
...
Рейтинг: 0 / 0
29.06.2007, 09:03
    #34627719
grieg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустые строки
Этот учебник устарел, лучше купи новый.

Код: plaintext
1.
#include <stdio.h>
Это ввод-выво в стиле Си. В С++ есть еще ввод/вывод через cin/cout. Полагаю, что опускаться до Сишнойго стиля без особой необходимости не стоит.

Код: plaintext
1.
#include <conio.h>
Это заголовок, который есть в ДОСе, а больше, думаю, нигде нет.

Код: plaintext
1.
main()
Это устаревший прототип main. Современные компиляторы скажут, что здесь ошибка.

В общем, потом придется переучиваться.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пустые строки / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]