Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Задача на файлы (язык С)  (Прочитано 11869 раз)
0 Пользователей и 8 Гостей смотрят эту тему.
Katiox-xa
Гость
« : 24-11-2008 19:56 » 

Здравствуйте.
Помогите, пожалуйста, в написании программы
Скопировать содержимое текстового файла, удалив в каждой строке слово номер N+1, если в слове номер N есть символ 4.

У меня пока получилось только: Скопировать содержимое текстового файла, удалив в каждой строке слово номер N




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

void del_n(char *pathFileInput, char *pathFileOutput, unsigned int *N)
{
char c;
unsigned int i=1;

FILE *fileInput;
FILE *fileOutput;
fileInput =fopen(pathFileInput,  "r");
fileOutput=fopen(pathFileOutput, "w");

while((c=fgetc(fileInput))!=EOF)
{

while(c!='\n' && c!=EOF)
{
if (c==' ')
{
i++;
fputc(' ', fileOutput);
}
else
  {

    if  (i!= *N)
fputc(c, fileOutput);

  }
c=fgetc(fileInput);


}
i=1;
fputc('\n', fileOutput);
}
fclose(fileInput);
fclose(fileOutput);
}

void main(void)
{
char *strInput;
char *strOutput;
unsigned int *number;

strInput=(char*)calloc(20, sizeof(char));
strOutput=(char*)calloc(20, sizeof(char));
number=(unsigned int*)malloc(1*sizeof(unsigned int));

printf("Input file path:  ");
scanf("%s", strInput);
                     printf("Output file path:  ");
scanf("%s", strOutput);
                     printf("Number:  ");
scanf("%u", n);
printf("\n");

del_n(strInput, strOutput, number);

free(strInput);
free(strOutput);
free(number);
}
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 25-11-2008 07:38 » 

Здесь главное точно определиться что является словом, т.е. какие символы могут входить в слово. После этого следует уточнить какие символы являются разделителями слов. По определению, все символы которые не могут включаться в слово являются разделителями слов.
Записан
Katiox-xa
Гость
« Ответ #2 : 25-11-2008 11:11 » new

Все, что не является буквами, является разделителем.
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 25-11-2008 13:16 » 

Все, что не является буквами, является разделителем.
Тогда получатся следующее определение понятия слово: слово может состоять только из прописных и строчных букв.

Исходя из полученного определения слова, предъявляемое тобой требование к условию удаления слова:
Скопировать содержимое текстового файла, удалив в каждой строке слово номер N+1, если в слове номер N есть символ 4.
никогда не будет достигаться, т.к. слово не может содержать цифр (смотри определение понятия слово).

Вывод: требуется просто написать программу которая будет копировать файл.
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 25-11-2008 13:29 » 

А вот и программа копирующая текстовый файл:
Код:
#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    FILE *in, *out;
    int ch;

    if (argc != 3) {
        fprintf(stderr,"Usage: %s INPUT_TEXT_FILE OUTPUT_TEXT_FILE\n",argv[0]);
        return 1;
    }

    if ((in = fopen(argv[1],"r")) == NULL) {
        fprintf(stderr,"Failed open file '%s': %s\n",argv[1],strerror(errno));
        return 1;
    }
    if ((out = fopen(argv[2],"w")) == NULL) {
        fprintf(stderr,"Failed open file '%s': %s\n",argv[2],strerror(errno));
        return 1;
    }

    while ((ch = fgetc(in)) != EOF)
        fputc(ch,out);

    fclose(in);
    fclose(out);

    return 0;
}
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 25-11-2008 13:33 » 

Serg79, будет сбивать человека с панталыку Улыбаюсь Должно быть, наоборот - словом в данном случае будет то, что разделяется пробелами или переводом строки.
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 25-11-2008 13:44 » 

Уж извольте господа, каково требование, таково и решение. Улыбаюсь
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 25-11-2008 13:55 » 

текстовый файл
содержит строки
   разделители строк \n\r     \n     \r   \r\n    Еще предложения?
строка содержит слова
слово содержит 4
   удалить следующее слово


 разделители (SPACE, TAB) кто-то еще знает разделители? (можно в список добавить BreakPage)


записать строку в файл
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 25-11-2008 14:08 » 

Ну текстовый файл может много чего содержать. Вот пример строки текстового файла:
Цитата
fprintf(stderr,"Failed open file '%s': %s\n",argv[2],strerror(errno));
Вот пускай  Katiox-xa и пояснит, что здесь является словом, что разделителем, а что попадает под определение  другое.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 25-11-2008 14:46 » 

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

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines