Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- using namespace std;
- int magick_find(string s, int start)
- {
- // Волшебная, сука, мать ее, функция поиска разделителей
- // Все возможные разделители слов
- int length = 9;
- // количество ебаных вариантов
- char* separator = new char[length];
- // Само это говно
- separator[0] = ' ';
- separator[1] = '.';
- separator[2] = ',';
- separator[3] = '\'';
- separator[4] = '\"';
- separator[5] = '!';
- separator[6] = '?';
- separator[7] = ':';
- separator[8] = ';';
- // ---
- int* index = new int[length];
- int min_index = -1;
- for (int i = 0; i < length; i++)
- {
- // Искаем первое вхождение для каждого разделителя
- index[i] = s.find_first_of(separator[i], start);
- if (index[i] > index[min_index]) min_index = i;
- }
- for (int i = 0; i < length; i++)
- {
- // Выбираем неотрицательный минимальный из них
- // (ибо если нету, то -1)
- if (index[i] >= 0 && index[i] < index[min_index]) min_index = i;
- }
- // Сохраняем себе индекс
- int res = index[min_index];
- // Очищаем поюзанную память
- delete[] separator;
- delete[] index;
- // Возвращаем занчение
- return res;
- }
- string* split_string(string s, int& array_length, char* &sep_array)
- {
- // Функция, разбивающая строку на массив слов
- array_length = 1;
- for (int i = magick_find(s, 0); i >= 0; i = magick_find(s, i + 1))
- {
- // рассчетс количества элементов как количество пробелов + 1
- array_length++;
- }
- int i1 = 0, i2;
- // Массив слов
- string* res = new string[array_length];
- // Массив разделителей
- sep_array = new char[array_length - 1];
- for (int i = 0; i < array_length; i++)
- {
- // Заполняем массив словами
- i2 = magick_find(s, i1);
- // Если разделитель принадлежит строке, то выписываем его отдельно
- if(i2 < s.length()) sep_array[i] = s[i2];
- // Выделяем подстроку длины i2 - i1 начиная с индекса i1
- res[i] = s.substr(i1, i2 - i1);
- i1 = i2 + 1;
- }
- return res;
- }
- int main()
- {
- //ifstream in("input.txt");
- //ofstream out("output.txt");
- string s;
- getline(cin, s);
- //Считываем строку
- int l;
- char* sep;
- string* as = split_string(s, l, sep);
- // Разбиваем строку на массив слов
- s.clear();
- // Убираем все из строки
- for (int i = 0; i < l / 2; i++)
- {
- // делаем необходимые махинации
- swap(as[i], as[l - i - 1]);
- }
- // снова собираем строку
- s.append(as[0]);
- for (int i = 1; i < l; i++)
- {
- // вставляя нужные разделители между слов
- s.append(1, sep[i - 1]);
- s.append(as[i]);
- }
- // выводим ее
- cout << s;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement