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

Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» - C++

Восстановить пароль Регистрация
 
KyKi
3 / 3 / 0
Регистрация: 12.09.2013
Сообщений: 129
03.01.2014, 17:38     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #1
Задача: Дан текстовый файл f. Сформировать файл h, заменив каждое вхождение слова «это» на слово «то». Слова – группы символов, разделенные про-белом или признаком конца строки.
Никак не разберусь именно с заменой,подскажите пожалуйста,как это можно сделать.
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
#include <iostream>
#include <fstream>  
#include <cstring>      
using namespace std;
 
const int k=40;
 
void Create_file(char fname[], ofstream &fout)  //функция создания файла
{
    setlocale(LC_ALL, "Russian");
    char st[k]; 
    fout.open(fname);   
    cout<<"\n Введите строку:"<<endl;
    cin>>st;    
    do 
    {
        fout<<st;   //записать в файл fout строку st
        fout<<"\n"; //запись в файл признака конца строки
        cin.getline(st,k);      
    }
    while (st[0]!='*'); 
    fout.close();       
}
 
 
void Read_file(char fname[],ifstream &fin)  //функция чтения файла
{
    char st[k]; 
    fin.open(fname);    
    cout<<"\n Содержимое файла "<<fname<<": ";
    while (fin.getline(st,k))   //прочитать из файла строку st, пока не конец файла
    {  
        cout<<"\n Строка после замены:"<<st<<endl;  
        cout<<endl;
    };
    fin.close();    
}
 
void Change_filef(char fname[],char hname[],char s[k],ifstream &fin,ofstream &hout) //функция замены "это" на "то"
{
    setlocale(LC_ALL, "Russian");
    char st[k];
    fin.open(fname);    //открыть файл f для чтения
    hout.open(hname); //открыть файл h для записи
    cout<<"Введите строку в которой необходимо заменить все слова ""это"" на ""то"": "; 
    cin>>s; //ввод строки для замены
    while (fin.getline(st,k))   //прочитать из файла строку st, пока не конец файла
    {  
        //вот тут не понимаю как сделать замену:(
    }
    hout.close();       //закрытие файла gout
    fin.close();        //закрытие файла fin
}
 
void main()     
{
  ofstream fout, hout;  
  ifstream fin,hin;     
  char st[k],s[k];
  char fname[k],hname[k];
  cout<<"\n Введите имя начального файла: "<<endl;
  cin>>fname;
  Create_file(fname,fout);  
  Read_file(fname,fin); 
  cout<<"\n Введите имя конечного файла: "<<endl;
  cin>>hname;
  Change_filef(fname,hname,s,fin,hout); 
  Read_file(hname,hin); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2014, 17:38     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то»
Посмотрите здесь:

C++ Скопировать текстовый файл в новый файл, заменив в каждой строке слова «ok» на «*»
C++ Дан тестовый файл. Вывести его содержимое в другой файл, заменив каждое вхождение пробела на символ нижнего подчеркивания.
строки (считать, заменив все вхождения слова «Slovo» на слово «Znak») C++
C++ Дан текстовый файл. Переписать компоненты файла в другой файл, заменив при этом каждое сочетание букв “no” на “on”
Преобразовать каждое слово в строке, заменив в нем все последующие вхождения его первой буквы на символ «.» C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
03.01.2014, 18:15     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #2
Попробовал Ваш код.
Комп подвис, но удалось снять проц. (я пытался в kwrite открыть файл выхода).
Оказалось, что он 1,3 Гб.
Видимо, где-то цикл вышел из под контроля.
KyKi
3 / 3 / 0
Регистрация: 12.09.2013
Сообщений: 129
03.01.2014, 18:18  [ТС]     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #3
Цитата Сообщение от katsidelin Посмотреть сообщение
Попробовал Ваш код.
Комп подвис, но удалось снять проц. (я пытался в kwrite открыть файл выхода).
Оказалось, что он 1,3 Гб.
Видимо, где-то цикл вышел из под контроля.
так код ведь не дописанный..я без функции замены еще и не пробовала компилировать.
мне бы хоть приблизительно понять как эта замена должна выглядеть
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
03.01.2014, 18:31     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #4
Сам в раздумье.
Если пойму как, напишу.
KyKi
3 / 3 / 0
Регистрация: 12.09.2013
Сообщений: 129
03.01.2014, 18:34  [ТС]     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #5
Цитата Сообщение от katsidelin Посмотреть сообщение
Сам в раздумье.
Если пойму как, напишу.
буду очень благодарна,даже за идеиа то у меня и идей нет
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 15
Регистрация: 26.12.2012
Сообщений: 382
03.01.2014, 18:44     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #6
KyKi, как вариант - в цикле вычленть из вашей считанной строки слова(функцией strstr)
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
И параллельно перезаписывать их в другой файл. Но если найдено то, что вам нужно заменить - в файл записываете новое слово.
KyKi
3 / 3 / 0
Регистрация: 12.09.2013
Сообщений: 129
03.01.2014, 18:59  [ТС]     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #7
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
KyKi, как вариант - в цикле вычленть из вашей считанной строки слова(функцией strstr)
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
И параллельно перезаписывать их в другой файл. Но если найдено то, что вам нужно заменить - в файл записываете новое слово.
дело в том что такой функцией не приходилось до этого пользоваться,не совсем понимаю как она работает
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
03.01.2014, 19:44     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #8
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
 // [url]http://www.cyberforum.ru/cpp-beginners/thread1062428.html[/url]
#include <iostream>
 
using namespace std;
 
 
int main(void)
{
  const char *StrA = "Экология - это наука об окружающей среде!";
   cout << endl << StrA << endl;
  const char l1 = 'э';
  const char l2 = 'т';
  const char l3 = 'о';
  const char L1 = 'Э';
  const char L2 = 'Т';
  const char L3 = 'О';
 
  char *StrB; // Новый массив.
  
  for (int x = 0, y = 0; StrA[x] != '\0'; x++)
  {
      if 
      ( 
      StrA[x] == l1
              ||
      StrA[x] == L2
      )
      {
              if 
              ( 
                StrA[x+1] != '\0' 
                && 
                (StrA[x+1] == l2 || StrA[x+1] == L2)
              )
              {
                 if 
                 (
                   StrA[x+2] != '\0'
                   &&
                   (StrA[x+2] == l3 || StrA[x+2] == L3)
                   )
                   {
                      if
                      (
                      StrA[x+3] != l2 && StrA[x+3] != L2
                      )
                      {
                         StrB[y] = StrA[x+1];
                         StrB[y+1] = StrA[x+2];
                         y++;
                         x+=2; // пропускаем то в слове это.
                      }
                      
                   }
              }
      }
      else
      {
          StrB[y] = StrA[x];
          y++;
      }
  };
  
  cout << StrB << endl;
 
  return 0;
}
У меня проблема.
Уже очень давно написал код.
Но у меня Линукс. Локаль UTF-8.
Она для русских букв по два байта.
Поэтому на wine поставил Dev-cpp.
Откомпилил.
Но там кодировка windows-1251 (cp1251), а в консоле wine cmd, стоит ibm866 (cp866).
В родной вайновской папке ...\windows\system32 нет файла chcp.exe, поэтому переключить локаль не могу.
Программа работает, но из-за проблем с кодировкой не пойму, что она выводит....
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 15
Регистрация: 26.12.2012
Сообщений: 382
03.01.2014, 20:00     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #9
KyKi, совсем напутал, это функция не strstr, a strtok.
Вот вам пример использования:

C++
1
2
3
4
5
6
7
8
9
10
11
char bufr[] = "live com cyberforum .net";
char *token;
token = strtok(bufr, " ");
while (true)
{
    cout << token << endl;
    token = strtok(NULL, " ");
 
    if (token == NULL)
        break;
}
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
03.01.2014, 20:51     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #10
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
 // [url]http://www.cyberforum.ru/cpp-beginners/thread1062428.html[/url]
#include <iostream>
#include <fstream>
 
using namespace std;
 
 
int main(void)
{
  const char *StrA = "Экология - это наука об окружающей среде!";
   cout << endl << StrA << endl;
  const char l1 = 'э';
  const char l2 = 'т';
  const char l3 = 'о';
  const char L1 = 'Э';
  const char L2 = 'Т';
  const char L3 = 'О';
 
//  cout << "Поиск исключения - Debug!" << endl;
 
  char *StrB = new char[1024]; // Новый массив.
 
//  cout << "Поиск исключения - Debug!" << endl;
//  cout << StrA[0] << endl;
 
  
  for (int x = 0, y = 0; StrA[x] != '\0'; x++)
//int x = 0, y = 0;
//  cout << "Поиск исключения - Debug!" << endl;
//  for (; x<10; x++)
  {
//  cout << "Поиск исключения - Debug!" << endl;
//  cout << StrA[x] << endl;
 
      if 
      ( 
      StrA[x] == l1
              ||
      StrA[x] == L2
      )
      {
//  cout << "Поиск исключения - Debug!" << endl;
    
              if 
              ( 
                StrA[x+1] != '\0' 
                && 
                (StrA[x+1] == l2 || StrA[x+1] == L2)
              )
              {
//      cout <<StrA[x+1];
 
                 if 
                 (
                   StrA[x+2] != '\0'
                   &&
                   (StrA[x+2] == l3 || StrA[x+2] == L3)
                   )
                   {
//           cout <<StrA[x+2];
 
                      if
                      (
                      StrA[x+3] != '\0' && StrA[x+3] != l2 && StrA[x+3] != L2
                      )
                      {
//              cout <<StrA[x+3];
 
                         StrB[y] = StrA[x+1];
                         StrB[y+1] = StrA[x+2];
                         y+=2;
                         x+=2; // пропускаем то в слове это.
                      }
                      
                   }
              }
      }
      else
      {
//  cout << 'A' << StrA[x]<<endl;
          StrB[y] = StrA[x];
//  cout << StrB[y];
          y++;
      };
  };
  
//  cout << StrB << endl;
 
 
  ofstream Fout;
  Fout.open("f.txt",ios_base::out);
  for (int x = 0; StrB[x] != '\0'; x++)
  {
      Fout << StrB[x];
  };
  Fout.close();
 
  return 0;
}
С горе попалам справился с задачей.
Вам нужно мой код совместить с Вашим.

Добавлено через 18 минут
Попробовал использовать файловый ввод, но при этом теряются символы пробелов и переносов строки.

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
 // [url]http://www.cyberforum.ru/cpp-beginners/thread1062428.html[/url]
#include <iostream>
#include <fstream>
 
using namespace std;
 
 
int main(void)
{
const char *File1 = "f";
const char *File2 = "p";
 
char *StrA = new char[1024];
 
ifstream Fin;
Fin.open(File1,ios_base::in);
  for (int x = 0; ( !Fin.eof() ) && (x < 1023); x++)
  {
      Fin >> StrA[x];
  };
Fin.close();
 
//  const char *StrA = "Экология - это наука об окружающей среде!";
 
  const char l1 = 'э';
  const char l2 = 'т';
  const char l3 = 'о';
  const char L1 = 'Э';
  const char L2 = 'Т';
  const char L3 = 'О';
 
 
 
  char *StrB = new char[1024]; // Новый массив.
 
  
  for (int x = 0, y = 0; StrA[x] != '\0'; x++)
  {
 
      if 
      ( 
      StrA[x] == l1
              ||
      StrA[x] == L2
      )
      {
 
              if 
              ( 
                StrA[x+1] != '\0' 
                && 
                (StrA[x+1] == l2 || StrA[x+1] == L2)
              )
              {
 
                 if 
                 (
                   StrA[x+2] != '\0'
                   &&
                   (StrA[x+2] == l3 || StrA[x+2] == L3)
                   )
                   {
 
                      if
                      (
                      StrA[x+3] != '\0' && StrA[x+3] != l2 && StrA[x+3] != L2
                      )
                      {
 
                         StrB[y] = StrA[x+1];
                         StrB[y+1] = StrA[x+2];
                         y+=2;
                         x+=2; // пропускаем то в слове это.
                      }
                      
                   }
              }
      }
      else
      {
 
          StrB[y] = StrA[x];
 
          y++;
      };
  };
  
 
 
 
  ofstream Fout;
  Fout.open(File2,ios_base::out);
  for (int x = 0; StrB[x] != '\0'; x++)
  {
      Fout << StrB[x];
  };
  Fout.close();
 
  return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.01.2014, 20:57     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #11
Что так всё сложно? Читать по словам (>>), сравнивать с "это", если не совпадает, записывать в файл, если совпадает - записывать "то".
KyKi
3 / 3 / 0
Регистрация: 12.09.2013
Сообщений: 129
03.01.2014, 21:15  [ТС]     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #12
Цитата Сообщение от katsidelin Посмотреть сообщение
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
 // [url]http://www.cyberforum.ru/cpp-beginners/thread1062428.html[/url]
#include <iostream>
#include <fstream>
 
using namespace std;
 
 
int main(void)
{
  const char *StrA = "Экология - это наука об окружающей среде!";
   cout << endl << StrA << endl;
  const char l1 = 'э';
  const char l2 = 'т';
  const char l3 = 'о';
  const char L1 = 'Э';
  const char L2 = 'Т';
  const char L3 = 'О';
 
//  cout << "Поиск исключения - Debug!" << endl;
 
  char *StrB = new char[1024]; // Новый массив.
 
//  cout << "Поиск исключения - Debug!" << endl;
//  cout << StrA[0] << endl;
 
  
  for (int x = 0, y = 0; StrA[x] != '\0'; x++)
//int x = 0, y = 0;
//  cout << "Поиск исключения - Debug!" << endl;
//  for (; x<10; x++)
  {
//  cout << "Поиск исключения - Debug!" << endl;
//  cout << StrA[x] << endl;
 
      if 
      ( 
      StrA[x] == l1
              ||
      StrA[x] == L2
      )
      {
//  cout << "Поиск исключения - Debug!" << endl;
    
              if 
              ( 
                StrA[x+1] != '\0' 
                && 
                (StrA[x+1] == l2 || StrA[x+1] == L2)
              )
              {
//      cout <<StrA[x+1];
 
                 if 
                 (
                   StrA[x+2] != '\0'
                   &&
                   (StrA[x+2] == l3 || StrA[x+2] == L3)
                   )
                   {
//           cout <<StrA[x+2];
 
                      if
                      (
                      StrA[x+3] != '\0' && StrA[x+3] != l2 && StrA[x+3] != L2
                      )
                      {
//              cout <<StrA[x+3];
 
                         StrB[y] = StrA[x+1];
                         StrB[y+1] = StrA[x+2];
                         y+=2;
                         x+=2; // пропускаем то в слове это.
                      }
                      
                   }
              }
      }
      else
      {
//  cout << 'A' << StrA[x]<<endl;
          StrB[y] = StrA[x];
//  cout << StrB[y];
          y++;
      };
  };
  
//  cout << StrB << endl;
 
 
  ofstream Fout;
  Fout.open("f.txt",ios_base::out);
  for (int x = 0; StrB[x] != '\0'; x++)
  {
      Fout << StrB[x];
  };
  Fout.close();
 
  return 0;
}
С горе попалам справился с задачей.
Вам нужно мой код совместить с Вашим.

Добавлено через 18 минут
Попробовал использовать файловый ввод, но при этом теряются символы пробелов и переносов строки.

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
 // [url]http://www.cyberforum.ru/cpp-beginners/thread1062428.html[/url]
#include <iostream>
#include <fstream>
 
using namespace std;
 
 
int main(void)
{
const char *File1 = "f";
const char *File2 = "p";
 
char *StrA = new char[1024];
 
ifstream Fin;
Fin.open(File1,ios_base::in);
  for (int x = 0; ( !Fin.eof() ) && (x < 1023); x++)
  {
      Fin >> StrA[x];
  };
Fin.close();
 
//  const char *StrA = "Экология - это наука об окружающей среде!";
 
  const char l1 = 'э';
  const char l2 = 'т';
  const char l3 = 'о';
  const char L1 = 'Э';
  const char L2 = 'Т';
  const char L3 = 'О';
 
 
 
  char *StrB = new char[1024]; // Новый массив.
 
  
  for (int x = 0, y = 0; StrA[x] != '\0'; x++)
  {
 
      if 
      ( 
      StrA[x] == l1
              ||
      StrA[x] == L2
      )
      {
 
              if 
              ( 
                StrA[x+1] != '\0' 
                && 
                (StrA[x+1] == l2 || StrA[x+1] == L2)
              )
              {
 
                 if 
                 (
                   StrA[x+2] != '\0'
                   &&
                   (StrA[x+2] == l3 || StrA[x+2] == L3)
                   )
                   {
 
                      if
                      (
                      StrA[x+3] != '\0' && StrA[x+3] != l2 && StrA[x+3] != L2
                      )
                      {
 
                         StrB[y] = StrA[x+1];
                         StrB[y+1] = StrA[x+2];
                         y+=2;
                         x+=2; // пропускаем то в слове это.
                      }
                      
                   }
              }
      }
      else
      {
 
          StrB[y] = StrA[x];
 
          y++;
      };
  };
  
 
 
 
  ofstream Fout;
  Fout.open(File2,ios_base::out);
  for (int x = 0; StrB[x] != '\0'; x++)
  {
      Fout << StrB[x];
  };
  Fout.close();
 
  return 0;
}
Большое спасибо)появилась мысль как это чуть упростить и совместить с моим кодом,буду пробовать
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.01.2014, 21:28     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #13
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
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    setlocale(0, "");
    
    ifstream fin("f.txt");
    if (!fin) cout << "Error1 fin!" << endl;
    else
    {
        ofstream fout("h.txt");
        char word[50];
        while (fin >> word)
        {
            if (strcmp(word, "это"))
                fout << word << ' ';
            else fout << "то" << ' ';
        }
        fin.close();
        fout.close();
    }
    
    cin.get();
    return 0;
}
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
04.01.2014, 07:47     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #14
Вы не учли, что используя подобный метод можно получить такие результаты: "это.", "это!", "это?" и т.д..
Знаки пунктуации и разный регистр символов...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2014, 12:49     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то»
Еще ссылки по теме:

C++ Преобразовать каждое слово в строк, заменив в нем все предыдущие вхождения его последней буквы на символ «.»
C++ Заменить всякое вхождение слова "это" на слово "то"
В тексте удалить каждое четное слово, продублировать каждое нечетное слово C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.01.2014, 12:49     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» #15
Цитата Сообщение от katsidelin Посмотреть сообщение
Вы не учли, что используя подобный метод можно получить такие результаты: "это.", "это!", "это?" и т.д..
Знаки пунктуации и разный регистр символов...
Я просто внимательно читаю задание. Если написано, что:
Цитата Сообщение от KyKi Посмотреть сообщение
Слова – группы символов, разделенные про-белом или признаком конца строки.
, то это знчит, что между словами только один пробел, после пследнего слова - EOF (о знаках пунктуации ничего не сказано). Если написано:
Цитата Сообщение от KyKi Посмотреть сообщение
заменив каждое вхождение слова «это» на слово «то»
, то это значит, что заменить нужно именно "это" на именно "то" (о регистре ничего не сказано). А выдумывать то, чего нет в задании, можно до бесконечности.
Цитата Сообщение от katsidelin Посмотреть сообщение
"это.", "это!", "это?" и т.д..
Знаки пунктуации и разный регистр символов...
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
#include <iostream>
#include <fstream>
#include <cctype>
using namespace std;
 
int main()
{
    setlocale(0, "");
 
    ifstream fin("f.txt");
    if (!fin) cout << "Error fin!" << endl;
    else
    {
        ofstream fout("h.txt");
        char word[50];
        
        while (fin >> word)
        {
            int n = strlen(word);
            if (n > 4 || n < 3 || (n == 4 && !ispunct((unsigned char)word[n - 1])))
            {
                fout << word;
                if (fin.peek() != EOF)
                    fout << ' ';
                continue;
            }
            
            if (strncmp(word, "это", 3) && strncmp(word, "ЭТО", 3))
            {
                fout << word;
                if (fin.peek() != EOF)
                    fout << ' ';
            }
            else 
            {
                fout << "то";
                if (n == 4) fout << word[n - 1];
                if (fin.peek() != EOF)
                    fout << ' ';
            }
        }
        fin.close();
        fout.close();
    }
    
    cin.get();
    return 0;
}
Yandex
Объявления
04.01.2014, 12:49     Сформировать файл h, заменив каждое вхождение слова «это» на слово «то»
Ответ Создать тему
Опции темы

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