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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2013, 16:59   #1
gnoma
Новичок
Джуниор
 
Аватар для gnoma
 
Регистрация: 06.11.2011
Сообщений: 1
По умолчанию Задача по теме "Текстовые файлы" на с++

Задание: Имеется два текстовых файла. В первом из них содержится некоторое описание. Переносы слов допускаются. Второй файл содержит список слов, не подлежащих разглашению. Требуется переписать первый файл, заменив каждое из подобных слов точками. Вопрос: Почему при нажатии любой клавиши меня сразу выбрасывает из программы? Нельзя даже путь к файлу прописать...Вот мой код программы:

#include "stdafx.h"
#include "string.h"
#include <conio.h>
#include <fstream>
#include <windows.h>
#pragma warning(disable: 4996)
const int SLOVOLEN = 128;

void soob(char msg[255]);


struct words {
char slovo[SLOVOLEN];
words *next;
};

int IsAlphaNum(char c) // ANSI 1251
{
if (c >= 'А' && c <= 'Я' || c >= 'а' && c <= 'я' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z' || c >= '0' && c <= '9') {
return c;
};
return 0;
};

int fillsequence(words *seq, char *filename)
{
FILE *fs = fopen(filename, "r");
char c;
int i;
memset(seq, 0, sizeof(words));
while(!feof(fs)){
i = fscanf (fs, "%c", &c);
if (i > 0)
if (IsAlphaNum(c) == 0){
if (seq->slovo[0] != 0) {
seq->next = new words;
seq = seq->next;
memset(seq, 0, sizeof(words));
}
}
else {
seq->slovo[strlen(seq->slovo)] = c;
}
}
fclose(fs);
return 0;
};

int freesequence(words *dict)
{
if (dict->next != NULL) {
freesequence(dict->next);
};
delete dict;
return 0;
};

int findwords(words *dict, char *str)
{
if (dict != NULL) {
if ( strcmp(dict->slovo, str) != 0) {
return findwords(dict->next , str);
}
else {
return 1;
}
};
return 0;
}

int modifer(words *dict, char *filename_in, char *filename_out)
{

FILE *fs = fopen(filename_in, "r"); // file source
FILE *fd = fopen(filename_out, "w"); // file destination
char c;
int i;
char buf[SLOVOLEN];
memset(buf, 0, SLOVOLEN);
while(!feof(fs)){
i = fscanf (fs, "%c", &c);
if (IsAlphaNum(c) == 0 && i > 0){
if (findwords(dict, buf) > 0) {
fwrite("....", 1, 4, fd);
}
else {
fwrite(buf, 1, strlen(buf), fd);
};
fwrite((char *)(&c), 1, 1, fd);
memset(buf, 0, SLOVOLEN);
}
else {
buf[strlen(buf)] = c;
}
}
fclose(fs);
fclose(fd);
return 0;
}

int main(int argc, char *argv[])
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
if (argc < 2) soob("Не указан исходный файл");
if (argc < 3) soob("Не указан файл словаря");
if (argc < 4) soob("Не указан выходной файл");
else if (argv[1] == NULL)
soob("Невозможно открыть исходный файл");
else if (argv[2] == NULL)
soob("Невозможно открыть файл словаря");
words *dictionary = new words;
fillsequence(dictionary, argv[2]);
modifer(dictionary, argv[1], argv[3]);
freesequence(dictionary);
return 0;
}
void soob(char msg[255])
{
printf("%s\n",msg);
getch();
exit(0);
}
gnoma вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ "текстовые файлы, вычисление авторского инварианта по А.Т Фоменко" Serega911 Помощь студентам 0 26.01.2010 16:10
Очень нужна помощь по Turbo Pascal...Не могу составить програму,по теме:"Процедуры и файлы"...( Zara Помощь студентам 2 02.12.2008 18:23
Задача по теме "файлы" Aleo13 Паскаль, Turbo Pascal, PascalABC.NET 13 10.11.2008 21:30
"Текстовые файлы" и "Графика и подпрограммы" Nata!!!@ Помощь студентам 5 05.12.2007 18:17