Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2009, 20:42   #1
velvetdust
 
Регистрация: 16.01.2009
Сообщений: 8
По умолчанию fseek вместо дополнительного массива (язык Си)

Задача - в текстовом файл заменить все последовательности идущих подряд пробелов одним пробелом. Новый файл не создавать.
Описание программы - прежде всего сохраняю размер текстового файла в переменной. Весь текст из файла переношу в специально выделенный динамический массив. Затем циклически читаются символы. Для каждого происходит вызов функции issp, которая возвращает значение, свидетельствующее о нахождении пробела. Наличие или отсутствие пробела отмечаю в специальном флаге. Если последующий символ тоже пробел, то он удаляется методом сдвига оставшегося текста влево. Полученный после преобразования текст записываю в файл.

Код:
#include <stdio.h>
#include <stdlib.h>

int issp(char c) 
{
	return (c==' ') ? 1 : 0; 
}

void main()
{
	FILE *f;
	char ch, *c;
	int cur, fleng=0, i, m, j=0, n;

	if ( (f=fopen("forread.txt","r+"))==NULL )
	{
		printf("Error while opening forread.txt/n");
		exit(0);
	}

	/* fseek(f,0,2);
	fleng=ftell(f);
	rewind(f);
	while((ch=fgetc(f))!=EOF)
	{
		if(ch=='\n')
			fleng--;
	}

	rewind(f); */
	
	c=(char*)malloc(fleng);
	for(i=0;i<fleng;i++) 
		c[i]=fgetc(f);

	for(i=0;i<fleng;i++) //вот этот кусок кода
	{
		if(issp(c[i]) && j==1)
		{
			for(m=i;m<(fleng-1);m++) 
				c[m]=c[m+1];
			fleng--;
			i--;
		}
		if (issp(c[i]))
		{
			j=1;
		}
		else
			j=0; //вот этот кусок кода
	}

	fclose(f);
	f=fopen("forread.txt","w");
	for(i=0;i<fleng;i++) 
		fputc(c[i],f);
	free(c);
	fclose(f);
}
Вопрос вот в чем, как вместо использования дополнительного массива в указанном куске кода, использовать функцию fseek
velvetdust вне форума Ответить с цитированием
Старый 25.06.2009, 20:53   #2
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию

Новый файл не создавать, а ты не пробовал просто записать целиком в массив и заново записать в файл
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Старый 25.06.2009, 21:27   #3
velvetdust
 
Регистрация: 16.01.2009
Сообщений: 8
По умолчанию

Ну, я преподавателю этот вариант уже показал) так что интересует ответ на конкретный поставленный вопрос)
velvetdust вне форума Ответить с цитированием
Старый 25.06.2009, 21:32   #4
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
Радость

Цитата:
Сообщение от velvetdust Посмотреть сообщение
Ну, я преподавателю этот вариант уже показал) так что интересует ответ на конкретный поставленный вопрос)
Внимательно тогда посмотри КАК ты задал вопрос, так что вывод: хочешь чтобы хотя бы подсказали то корректно задавай вопрос и напиши пример, я не понял как информация в массиве будет лежать в каком виде
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вместо русского знаки ? SwiP SQL, базы данных 5 06.04.2009 23:27
JS вместо PHP Asteroid JavaScript, Ajax 1 05.12.2008 15:44
Вместо фильмов слайд-шоу )= Лайка Свободное общение 10 17.05.2008 15:19
вместо шрифтов рисуются иероглифы Sharley Общие вопросы Delphi 4 27.04.2008 18:41
ссылка вместо текста!!! Abbatik Помощь студентам 7 09.02.2008 13:29