0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
1

В файле заменить все слова максимальной длины на слова минимальной длины

16.12.2016, 14:13. Показов 1078. Ответов 6
Метки нет (Все метки)

Нужно в считанном из файла тексте заменить все слова максимальной длины на слова минимальной длины, а результат записать в новый файл. Словом считается любая последовательность символов ненулевой длины, для которой пробел определен, как разделитель слов. Знаки препинания, стоящие в конце слов не являются их частью.
Ну мало ли, может кому-нибудь нечего делать и он поможет :3
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2016, 14:13
Ответы с готовыми решениями:

Строки. Поиск слова минимальной длины, вывод этой длины, номер слова и само слово
Как организовать решение такой задачи? Может как-то через создание массивов, в ячейках которых...

Поменять местами слова максимальной и минимальной длины в строке
Задание: Дана строка. Подсчитать количество символов в каждом слове. Сформировать новую строку,...

Определить в предложении слова максимальной и минимальной длины и поменять их местами. C
Доброе время суток!:) Уважаемы программисты, помогите, пожалуйста решить задачу: Дана строка...

Определить все слова максимальной длины в строке
Определить все слова максимальной длины в строке Начало положено,строка инициализирована int...

6
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 403
16.12.2016, 16:11 2
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
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <string>
#include <cctype>
#include <algorithm>
 
//=============================================================================
int main()
{
  std::ifstream inStream("Test.txt");
  if (!inStream)
  {
    std::cout << "Can't open file" << std::endl;
    return 1;
  }
 
  std::istream_iterator<std::string> in(inStream), inEnd;
  std::vector<std::string> file(in, inEnd);
  std::vector<size_t> lengths;
 
  for (size_t j = 0, sz = file.size(); j != sz; ++j)
  {
    std::string tempStr = file[j];
 
    if (std::ispunct(tempStr[tempStr.size() - 1]))
      tempStr.pop_back();
 
    lengths.push_back(tempStr.size());
  }
 
  auto itMax = std::max_element(lengths.cbegin(), lengths.cend());
  size_t max = *itMax,
         min = lengths[itMax - lengths.cbegin()],
         minIndx = 0;
 
  for (size_t j = 0, sz = lengths.size(); j != sz; ++j)
    if (min > lengths[j] &&
        lengths[j] != 0)
    {
      min = lengths[j];
      minIndx = j;
    }
 
  std::string minStr = file[minIndx];
  if (std::ispunct(minStr[minStr.size() - 1]))
    minStr.pop_back();
 
  for (size_t j = 0, sz = lengths.size(); j != sz; ++j)
  {
    if (lengths[j] == max)
    {
      if (std::ispunct(file[j][file[j].size() - 1]))
        file[j] = minStr + file[j][file[j].size() - 1];
      else
        file[j] = minStr;
    }
  }
 
  inStream.close();
  std::ofstream outStream("Test.txt");
  if (!outStream)
  {
    std::cout << "Can't open file" << std::endl;
    return 2;
  }
 
  std::ostream_iterator<std::string> out(outStream, " ");
  for (const auto& j : file)
    *out++ = j;
 
  return 0;
}
1
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
25.12.2016, 20:18  [ТС] 3
Спасибо огромное! Не подскажете, как можно сделать так, чтобы вот это:
Artos, Portos and Nikitos.
One apple, two apple, free aple.
Он не писал в одну строку после обработки, а писал, как и прежде, в две?
0
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 403
25.12.2016, 21:51 4
69 строку поправь вот так:
C++
1
std::ostream_iterator<std::string> out(outStream, "\n");
0
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
26.12.2016, 04:24  [ТС] 5
Пыталась, но он тогда после каждого слова на новую строку открывает...
0
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 403
27.12.2016, 15:41 6
Цитата Сообщение от Araell Посмотреть сообщение
Пыталась, но он тогда после каждого слова на новую строку открывает...
да, извините, я поторопился с ответом... вот вам рабочий вариант программы:
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 <sstream>
#include <iterator>
#include <vector>
#include <string>
#include <cctype>
 
//=============================================================================
int main()
{
  std::ifstream inStream("Test.txt");
  if (!inStream)
  {
    std::cout << "Can't open file" << std::endl;
    return 1;
  }
 
  std::string temp;
  std::vector<std::string> file;
  while (getline(inStream, temp))
    file.push_back(temp);
 
  std::string minStr, maxStr;
  for (size_t j = 0, sz = file.size(); j != sz; ++j)
  {
    std::istringstream iss(file[j]);
 
    while (iss >> temp)
    {
      if (minStr.empty())
        minStr = temp;
      if (maxStr.empty())
        maxStr = temp;
 
      if (std::ispunct(temp[temp.size() - 1]))
        temp.pop_back();
 
      if (minStr.size() > temp.size())
        minStr = temp;
      if (maxStr.size() < temp.size())
        maxStr = temp;
    }
  }
 
  for (size_t j = 0, sz = file.size(); j != sz; ++j)
  {
    size_t indx = 0;
    while ((indx = file[j].find(maxStr, indx)) != std::string::npos)
    {
      file[j].replace(indx, maxStr.size(), minStr);
      indx = 0;
    }
  }
 
  inStream.close();
  std::ofstream outStream("Test.txt");
  if (!outStream)
  {
    std::cout << "Can't open file" << std::endl;
    return 2;
  }
 
  std::ostream_iterator<std::string> out(outStream, "\n");
  for (const auto& j : file)
    *out++ = j;
 
  return 0;
}
1
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
27.12.2016, 21:35  [ТС] 7
Огромное спасибо)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2016, 21:35
Помогаю со студенческими работами здесь

Найти порядковый номер слова максимальной длины и позицию слова
Привет. Нужна помощь. Вот задача : Вывести на экран порядковый номер слова максимальной длины...

Слово максимальной длины заменить на слово минимальной длины
Задача: Создать 2 объекта разработанного класса. Одной из компонент класса является символьная...

Функция,которая создаёт новую строку,в которой удалены все слова минимальной длины
Здравствуйте. Помогите пожалуйста. на C++ Написать функцию,которая создаёт новую строку,в которой...

Нахождение слова минимальной длины
Доброе время суток Имеется такой код просто вывода текста из файла на экран(Слов в файле несколько...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru