Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C]заменить числа в файле числительными 
:(
    Опции темы
Laxus
Дата 18.12.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.12.2008

Репутация: нет
Всего: нет



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

Ф-ю которая которая переводит число (long int) и падеж (int от 1 до 6) в числетельное нужного падежа (char*) я сделал с помощью туевой кучи case'ов (более рационального способа мне в голову не пришло). Она вроде работает. А с остальным у меня проблемы. Да еще и кодировка Дос и Вин разные (но это еще можно решить досконвертером).

Я планировал сделать так:
прочитать файл в строку (желательно одну)
а дальше проверять каждый символ, если он не число, то писать в файл, если это код числа, то записывать эти символы в какую-то переменную, пока эти символы - числа (while(isdigit(str[i])) вроде что-то типа этого) как только числа кончились, перевести указатель на букву падежа (тоесть пропускатьсимволы пока не дойдем до скобки, и еще плюс один) вот из нее как-то надо выделить падеж. Затем сворганить числительное из выделеного числа переведенного в long int и падежа в виде числа int и записать эту строку в файл, и дальше опять проверять следующие символы и записывать их в файл если это не число...
PS:обьяснил как смог....Насчет верности и рациональности алгоритма не совсем уверен.
 
Вот жалкая попытка основной функции и функции падежа, функцию генерации склонения не выкладываю (она вроде работает, да и слишком много строк занимает, но если понадобиться могу выложить)

Код

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int padej(char x)
  {if(x=='И'||x=='и') return 1;
  if(x=='Р'||x=='р') return 2;
  if(x=='Д'||x=='д') return 3;
  if(x=='В'||x=='в') return 4;
  if(x=='Т'||x=='т') return 5;
  if(x=='П'||x=='п') return 6;
  printf("Ошибка падежа!");
  return 1;
  }
void main()
  {char txt[50][80];
  char str[40000];
  char chislo[11];
  char file[200];
  char rezultat[300];
  printf("\n  Введите имя файла: ");
  scanf("%s",&file);
  FILE *f;
  f=fopen(file,"r+");
  int i=0,j=0;
  do
   {fgets(txt[i],79,f);
   strcat(str,txt[i]);
   i++;
   }
  while(!feof(f));
  i=0;
  rewind(f);
  while(str[j]) 
    {if(isdigit(str[j])) 
      {while(isdigit(str[j])) 
    {chislo[i]=str[j]; 
    j++;
    i++;
    }
    chislo[i]='\0';
    i=0;
     while(str[j]!='(') 
     {j++;
      }
      j++; 
      sklonyator(atol(chislo),padej(str[j]),rezultat);   // обращение к функции генерирующей числительное
      fprintf(g,"%s",&rezultat);
      j=j+2;
      }
    fprintf(g,"%s",str[j]);
    j++;
    }
    fclose(f);
  }



Это сообщение отредактировал(а) Laxus - 18.12.2008, 21:52
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.