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

Cтруктуры, С++ - C++

Восстановить пароль Регистрация
 
vlados92
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 28
23.02.2011, 00:39     Cтруктуры, С++ #1
С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки не должна превышать 70 символов). Имя файла должно иметь расширение DAT.
Помогите написать программу, которая:
• Выводит текст на экран дисплея;
• По нажатию произвольной клавиши поочередно выделяет в тексте заданное слово (заданное слово вводится с клавиатуры);
• Выводит текст в файл, заменяя в заданном слове строчные буквы прописными.

Добавлено через 12 часов 17 минут
Вот есть код похожей проги, если не сложно переделайте под моё условие:
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#include "stdafx.h"
#include <iostream>
#include <windows.h>
 
int minimum (int m[], int k, char **str);
void textout(char filename[],char **str,int strl,int *minwords,int strlmw);
int checkmin(int i,int *minwords,int strlmw);
int fileout(char filename[],char *str);
void setcolor(short color);
 
int main () {
  FILE * pFile;
  long lSize;
  char * buffer;
  size_t result;
  char filename[255];
 
  setcolor(4);
  std::cout << "Enter file to open (file.dat):" << std::endl;
  setcolor(7);
  std::cin >> filename;
  pFile = fopen ( filename , "r" ); //открываем файл для чтения
  if (pFile==NULL) {
      std::cout << "Read error. Can't open file!" << std::endl;
      system("pause");
      return 0;
  }
  // получаем размер файла
  fseek (pFile , 0 , SEEK_END);
  lSize = ftell (pFile);
  if (lSize > 1000){
      std::cout << "Read error. Length > 1000." << std::endl;
        fclose(pFile);
    }
  rewind(pFile);
 
  // выделяем память для чтения
  buffer = (char*) malloc (sizeof(char)*lSize);
  if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
 
  // копируем содержимое файла в буффер
  result = fread (buffer,1,lSize,pFile);
  buffer[result] = 0;
    int j=0,c=0;
    /*Проверяем длину строк текста. Если больше 70 - выходим из программы*/
    while (buffer[c] != '\0')
    {
        if (buffer[c] != '\n')
        {
            j++;
        } else
            j=0;
        if (j > 70){
            std::cout << "Length of string > 70!" << std::endl;
            system("pause");
            return 0;
        }
        c++;
    }
  setcolor(5);
  printf("%s\n",buffer);
  setcolor(7);
  char * pch;
  int i=0,counterspace=0,w=0;
  char **shortarr;
  int *wordlen = new int [strlen(buffer)];
  while (true)
  {
      if (buffer[w] == ' ' || buffer[w] == '\n')
      {
counterspace++; //считаем кол-во пробелом для выделения динам.памяти
      }
      if (buffer[w] == '\0')
      {
          shortarr = new char*[counterspace];
          pch = strtok(buffer," ");
          while (pch != NULL)
          {shortarr[i] = pch; //разбиваем прочитанный текст по пробелу и заносим слова в массив
    wordlen[i] = (int)strlen(pch); //создаем массив с длинами всех слов
              pch = strtok(NULL, " ");
              i++;
          }       
          minimum(wordlen,i,shortarr); //переходим к нахождению мин.слова
          break;
      }
      w++;
  }
  // terminate
  fclose (pFile);
   system("pause");
  return 0;
}
int minimum (int m[], int k,char **str)
{
 int index=0;
 int min=m[0];
 int countmin=0;
 int j=0;
 char filenameout[255]; //имя файла для вывода
 for (int i=0; i<k; i++)
 {
     if (m[i]<min)
     {
         min=m[i]; //ищем минимальный элемент из массива длин слов
     }
 }
 for (int i=0; i<k; i++){
     if (m[i] == min)
     {
countmin++; //считаем кол-во мин.эл-тов для послед.выделения памяти
     }
 }
 int *minwords = new int[countmin];
 for (int i=0;i<k;i++)
 {
     if (m[i] == min)
     {
minwords[j] = i; //запоминаем индексы слов с минимальным кол-вом символов
        j++;
     }
 }
 setcolor(4);
 std::cout << "Enter filename to save: " << std::endl;
 setcolor(7);
 std::cin >> filenameout;
 textout(filenameout,str,k,minwords,countmin);
 delete [] minwords;
 return 0;
}
void textout(char filename[],char **str,int strl,int *minwords,int strlmw)
{
    system("cls");
    for (int i=0;i<strl;i++)
    {
if (checkmin(i,minwords,strlmw)) //если слово с мин.кол-вом символов - выделяем его и записываем в файл
        {
            setcolor(2);
            std::cout << str[i] << " ";
            fileout(filename,str[i]);
        } else {
            setcolor(7);
            std::cout << str[i] << " ";
        }
    }
    std::cout << std::endl;
}
 
int checkmin(int i,int *minwords,int strlmw)
{
/*проверка, является ли текущее слово минимальным (из массива мин.индексов)*/
    int counter = 0;
    for (int j=0;j<strlmw;j++)
    {
        if (i==minwords[j])
            counter++;
    }
    if (counter > 0) //если является..
    {
        DWORD dwR;
        HANDLE hStdIn;
        _INPUT_RECORD IR;
        AllocConsole();
        hStdIn = GetStdHandle(STD_INPUT_HANDLE);
        while(TRUE) {
            ReadConsoleInput(hStdIn, &IR, 1, &dwR);
            if((IR.EventType == KEY_EVENT)&&(IR.Event.KeyEvent.bKeyDown)) //выполняем действия при нажатии клавиш
                {
if(IR.Event.KeyEvent.wVirtualScanCode!=1) //при нажатии любой клавиши, кроме ESC выводи новый кусок текста
return 1;
            }//if
        }//
    } else {
        return 0;
    }
}
int fileout(char filename[],char *str)
{
    FILE * pFileOut;
    pFileOut = fopen ( filename , "a" );
    fprintf(pFileOut,"%s\n",str);
    fclose (pFileOut);
    return 0;
}
void setcolor(short color)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2011, 00:39     Cтруктуры, С++
Посмотрите здесь:

C++ Cтруктуры в С++, создание БД.
Cтруктуры. Перечисления. Объединения C++
Lisp Рeкурcивные cтруктуры дaнных (деревья)
Рeкурcивные cтруктуры дaнных (деревья) Prolog
Cтруктуры, поиск книг заданного автора C++

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

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

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