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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2009, 16:16   #1
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию Программа удаления знаков препинания...

Нужно написать программу, которая открывает текстовый файл на чтение и удаляет оттуда слова после которых стоит знак препинания

'.' , ',' , ':' , ';' , '!' , '?' , '-' - вроде бы все самые основные

вот мой код попытался сделать на удаление слов после которых точка, но чтото как то не работает... а как на все знаки препинания сделать что-то не представляю... вроде как то можно через функцию ispunct, но кажется русские символы она воспринимает тоже, как знаки препинания...
Код:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void main(){
  FILE *o=fopen("D:\\work\\B.txt","r");
	int kp;
	char *k, *nf, *kf;
	const int N = 109;
	char ch[N];
	nf = fgets(ch, N, o);
	while ((kf = strchr(nf, '.')) != NULL)
	{
		kp = 0;
		for (k = nf; k <= kf; k++)
			if (*k == ' ')  kp++;
		if (kp > 1)
		{
			if (nf != ch) fputc(' ', o);
			for (k = nf; k <= kf; k++)
				fputc(*k, o);
		}
		nf = ++kf;
		while (*nf == ' ') nf++;
	}
	fputc(' ', o);

	fflush(o);
	fclose(o);
}
hen вне форума Ответить с цитированием
Старый 10.10.2009, 16:39   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

а в каком виде текст в файле?
т.е
Код:
slovo,slovo 
slovo, slovo 
slovo , slovo
какой-то один из этих или все сразу?
m0nax вне форума Ответить с цитированием
Старый 10.10.2009, 16:49   #3
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

Вот текст моего текстового файла...
Код:
At the beginning of XIV century in Western Europe appeared woodcutting (it was developed 
First codex was used for accounting, but 
long before the East). In the matrix of woodcuts depicting Pages 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
cut from a piece of wood. It can be dipped in ink and 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
used to make multiple copies of a page. Books, as well as playing 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
cards and religious pictures, began to produce woodcuts. But the creation of the book was 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
laborious process, since each page had to do his carving. Besides,
similar to the pagan texts, which are usually written in the form of scrolls.
Above you can view the video clip, which was added by our users. You can view it directly
 on our site, or download it to your computer and transfer it to the usual format. 
Avi (DivX) with the help of the program YouTube Downloader. You can download it here. Use 
it to convert video to normal video file, which you can enjoy with friends at any moment, 
even if you're somewhere on a picnic at the weekend.
Т.е. в строке может быть и несколько слов со знаками препинания, и вот нужно удалить и сам знак препинания и слово после которого он стоит
hen вне форума Ответить с цитированием
Старый 10.10.2009, 17:11   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

мне кажется сделать можно так:
считываем слова из файла в массив символов,
затем проверяем является ли последний символ знаком препинания
делаем что-то со словом(удалять например)

так сказать альфа версия программки, общую суть идеи показывает

Код:
#include <iostream>
#include <fstream>

using namespace std;

void main()
{	
	char stroka[50] ;
	
	ifstream file("1.txt") ;
	while(!file.eof()) //пока не конец файла
	{
		file >> stroka ; 
		cout << stroka << endl ;
		//cout << "   " <<strlen(stroka) << endl ; 

		if( (stroka[strlen(stroka) - 1 ] == '.' ) ||  
		    (stroka[strlen(stroka) - 1 ] == ',') || 
		    (stroka[strlen(stroka) - 1 ] == ';') ) //если последний символ слова - знак препинания то 

			cout << ">>>>>>>>>>>>>>>>> detect . or , or ; " << endl;	 //сделать что-то

	}
	file.close();
	system("pause");
}

Последний раз редактировалось m0nax; 10.10.2009 в 17:17.
m0nax вне форума Ответить с цитированием
Старый 10.10.2009, 18:03   #5
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

Цитата:
Сообщение от m0nax Посмотреть сообщение
мне кажется сделать можно так:
считываем слова из файла в массив символов,
затем проверяем является ли последний символ знаком препинания
делаем что-то со словом(удалять например)

так сказать альфа версия программки, общую суть идеи показывает

Код:
#include <iostream>
#include <fstream>

using namespace std;

void main()
{	
	char stroka[50] ;
	
	ifstream file("1.txt") ;
	while(!file.eof()) //пока не конец файла
	{
		file >> stroka ; 
		cout << stroka << endl ;
		//cout << "   " <<strlen(stroka) << endl ; 

		if( (stroka[strlen(stroka) - 1 ] == '.' ) ||  
		    (stroka[strlen(stroka) - 1 ] == ',') || 
		    (stroka[strlen(stroka) - 1 ] == ';') ) //если последний символ слова - знак препинания то 

			cout << ">>>>>>>>>>>>>>>>> detect . or , or ; " << endl;	 //сделать что-то

	}
	file.close();
	system("pause");
}
Проблема заключается в том что я делаю в Turbo C++ и там данный код работает не очень корректно...


Мне результат нужно записывать обратно в файл, в виде строки, без '\n' после каждого слова... А в твоем примере остаются иногда знаки препинания...
hen вне форума Ответить с цитированием
Старый 10.10.2009, 18:26   #6
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

код работает именно так как должен работать
я же сказал что это не полноценная прога, а просто пример идеи как отследить знаки препинания...

вместо вывода сообщения на экране можно поставить удаление этого слова, запись в файл или чего там нужно...

Последний раз редактировалось m0nax; 10.10.2009 в 18:28.
m0nax вне форума Ответить с цитированием
Старый 10.10.2009, 18:52   #7
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

Цитата:
Сообщение от m0nax Посмотреть сообщение
код работает именно так как должен работать
я же сказал что это не полноценная прога, а просто пример идеи как отследить знаки препинания...

вместо вывода сообщения на экране можно поставить удаление этого слова, запись в файл или чего там нужно...
Извини, теперь понял смысл работы, кода...
А как записывается функция удаления из файла??
Т.е. если я правильно понимаю, нужно в том месте где if приписать поиск остальных нужных знаков, и тогда если знак то удаление слова, а потом запись в файл...
Только вот непонимаю, как записать удаление слова, и потом запись обработанной строки в файл (может быть это можно осуществить поэлементно из строки??)
hen вне форума Ответить с цитированием
Старый 10.10.2009, 19:30   #8
XeN0N
Форумчанин
 
Аватар для XeN0N
 
Регистрация: 18.01.2009
Сообщений: 118
По умолчанию

http://itpaste.ru/788
XeN0N вне форума Ответить с цитированием
Старый 10.10.2009, 19:52   #9
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

Цитата:
Сообщение от XeN0N Посмотреть сообщение
Мне необходимо писать в Turbo C++...
Там даже нет библиотечного модуля vecotr.h и выкидывает кучу ошибок...
hen вне форума Ответить с цитированием
Старый 10.10.2009, 20:01   #10
XeN0N
Форумчанин
 
Аватар для XeN0N
 
Регистрация: 18.01.2009
Сообщений: 118
По умолчанию

В стандарте С++ есть библиотека vector (не vector.h )
Если твой компилятор не поддерживает ее, бери другой
XeN0N вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Программа-справочник, Функция удаления записи из файла umnik90 Общие вопросы C/C++ 1 11.06.2009 16:07
Программа для удаления AutoRun вирусов pomoshnic Помощь студентам 1 01.04.2009 04:57
Нужна программа для удаления содержимого папки DNK1980 Фриланс 6 11.02.2008 16:52
Защита файлов от удаления Viteef Общие вопросы Delphi 10 02.06.2007 07:40