Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Гость
Сообщений: n/a
#1

Помогите с доработкой - C++

06.10.2007, 19:33. Просмотров 1224. Ответов 0
Метки нет (Все метки)

Задание
Составить программу обработки текста, считываемого из файла. Для чего разработать функцию для обработки текста с переменным числом параметров, в качестве параметров она должна принимать значения текстовых предложений (разделитель - .), строк (разделитель - \n) или слов (разделитель – пробел или . , ! ? \n) (по варианту задания) для обработки и возвращать указатель на обработанный текст. В качестве первого параметра – имя функции (указатель), используемой для перевода символов из одного формата в другой, которую определить ниже по тексту программы. Данная функция должна вызываться через переданный указатель и принимать обрабатываемый(-ые) символ(ы), возвращая результирующий. Обработанный текст вывести в результирующий файл. В отчете привести исходный и обработанный текст.
Функция с переменным числом параметров получает: слова
Функция обработки символа:Слова – с загл. буквы

Вот код,который я пытался сделать...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
char* cCharProcessing(char* cInput);
 
char** ppcStringProcessing(char* (*f)(char *cInput), ...)
{
  va_list apList;
  int iStrCount, iStrMaxCharCount, i, j;
  char** ppcText;
  va_start(apList, f);                              /* Извлечение   */
  iStrCount = va_arg(apList,int);                   /* аргументов   */
  iStrMaxCharCount = va_arg(apList,int);
  ppcText = va_arg(apList,char**);
  for(i = 0;i < iStrCount;i++)
  {
 
  char* cChar=new char[iStrMaxCharCount];
  strcpy(cChar,ppcText[i]);            /* Обработка    */
  strcpy(cChar,f(cChar));
  strcpy(ppcText[i],cChar);
  }
  return ppcText;
}
 
#pragma argsused
int main(int argc, char* argv[])
{
   FILE *fileIn, *fileOut;                           /* Объявл.файлы */
                                                     /* Счетчики=0   */
   int iCharCount = 0, iStrMaxCharCount = 0, iStrCount = 0, i = 0, j = 0;
   char **ppcText;
   fileIn = fopen("Input.txt", "rt");                /* Открытие Вх. */
   if (fileIn == NULL)  {                            /* Удачно?      */
      fprintf(stderr, "Cannot open input file.\n");  /* нет- Ошибка  */
      return 1;                                      /*      Возврат */
   }
   fileOut = fopen("Output.txt", "wt");              /* Открытие Вых.*/
   if (fileOut == NULL) {                            /* Удачно?      */
      fclose(fileIn);                                /* нет- Закр.Вх.*/
      fprintf(stderr, "Cannot open output file.\n"); /*      Ошибка  */
      return 1;                                      /*      Возврат */
   }
   while (!feof(fileIn)) {                           /* Цикл подсчета*/
      int iChar = fgetc(fileIn);                     /* Чтение символ*/
      if(    iChar == '\n' || iChar == '\r' 
          || iChar==' '||iChar=='!'||iChar=='?'||iChar==','||iChar=='.') 
      {                                              /* Подсчет      */
       if(iCharCount > iStrMaxCharCount) iStrMaxCharCount = iCharCount;
       iCharCount = 0;
       if(iChar == '\n' || iChar == '\r' 
          || iChar==' '||iChar=='!'||iChar=='?'||iChar==','||iChar=='.') iStrCount++;
      } else iCharCount++;
   }
   iStrCount++;
   ppcText = malloc(sizeof(char*)*iStrCount);               
   if (ppcText == NULL)  {                           /* Удачно?      */
      fprintf(stderr, "Cannot allocate memory.\n");  /* нет- Ошибка  */
      fclose(fileIn);                                /* Закрытие Вх. */
      fclose(fileOut);                               /* Закрытие Вых.*/
      return 1;                                      /*      Возврат */
   }
   for(i=0;i<iStrCount;i++) {
      ppcText[i] = malloc(sizeof(char)*iStrMaxCharCount);
      if (ppcText[i] == NULL)  {                     /* Удачно?      */
         fprintf(stderr, "Cannot allocate memory.\n");/* нет- Ошибка  */
         for(j = 0;j < i;j++)                        /*Освобождаем   */
             free(ppcText[j]);                       /*память        */
         fclose(fileIn);                             /* Закрытие Вх. */
         fclose(fileOut);                            /* Закрытие Вых.*/
         return 1;                                   /*      Возврат */
      }
   }
   fseek(fileIn,0,SEEK_SET);
   iStrCount = 0;
   iCharCount = 0;
   while (!feof(fileIn)) {                           /* Цикл чтения  */
      char iChar = fgetc(fileIn);                     /* Чтение символ*/
      if(!(iChar == '\n' || iChar == '\r' 
          || iChar==' '||iChar=='!'||iChar=='?'||iChar==','||iChar=='.'))
            ppcText[iStrCount][iCharCount++] = iChar;
      if(iChar == '\n' || iChar == '\r' 
          || iChar==' '||iChar=='!'||iChar=='?'||iChar==','||iChar=='.') {           /* Новая строка */
       if(iCharCount > iStrMaxCharCount) iStrMaxCharCount = iCharCount;
       ppcText[iStrCount][iCharCount++] = '\0';
       iCharCount = 0;
       if(iChar == '\n' || iChar == '\r' 
          || iChar==' '||iChar=='!'||iChar=='?'||iChar==','||iChar=='.') iStrCount++;
      }
   }
   iStrCount++;
   ppcStringProcessing(cCharProcessing,iStrCount,iStrMaxCharCount,ppcText);
   for(i = 0;i < iStrCount;i++)
   {
      for(j = 0;j < iStrMaxCharCount && ppcText[i][j];j++)
           fputc(ppcText[i][j], fileOut);
      fputc(' ',fileOut);
   }                                                 /* Вывод        */
   for(i = 0;i < iStrCount;i++)                      /*Освобождаем   */
             free(ppcText[i]);                       /*память        */
   free(ppcText);
   fclose(fileIn);                                   /* Закрытие Вх. */
   fclose(fileOut);                                  /* Закрытие Вых.*/
   fprintf(stdout, "All OK!\n");
 
   system("PAUSE"); 
   return 0;                                         /* Выход        */
}
 
char* cCharProcessing(char *cInput)
{
   if(cInput[0] >= 'а' && cInput[0] <= 'я')
      cInput[0]=cInput[0] - 32;
   else return cInput;
}
Код делал на Dev C++ ,плиз помогите,подскажите что нужно изменить или доделайте до работоспособности проги,плиз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2007, 19:33     Помогите с доработкой
Посмотрите здесь:

C++ помогите с
Помогите !!!! C++
C++ Помогите!
C++ помогите)
помогите C++
C++ помогите
C++ ПОМОГИТЕ С++
C++ помогите
C++ Помогите
Помогите!!!!=) C++
C++ помогите!

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 06:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru