Advertisement
codegod313

N(string)

Nov 30th, 2019
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. void reverser(char *s, int l, int r) {
  8.     int j = 0;
  9.     for (int i = l; i <= (l + r) / 2; i++) {
  10.         swap(s[i], s[r - j]);
  11.         j++;
  12.     }
  13. }
  14.  
  15.  
  16.  
  17. void swapper(char *s) {
  18.     int n = 0;
  19.     int i = 0;
  20.     int l, l1, l2;
  21.     int r, r1, r2;
  22.     int length_max = -1;
  23.     int length_min = 999999;
  24.     while (s[i]) {
  25.         while (s[i] == ' ' || s[i] == '.' || s[i] == ',') i++;
  26.         l = i;
  27.         while (s[i] && s[i] != ' ' && s[i] != '.' && s[i] != ',')i++;
  28.         r = i - 1;
  29.         n++;
  30.         if (r-l>length_max) {
  31.             length_max = r - l;
  32.             r1 = r;
  33.             l1 = l;
  34.         }
  35.         if (r - l < length_min) {
  36.             r2 = r;
  37.             l2 = l;
  38.             length_min = r - l;
  39.         }
  40.     }
  41.     if (l2 < l1) {
  42.         swap(l1, l2);
  43.         swap(r1, r2);
  44.     }
  45.     reverser(s, l1, r2);
  46.     r1 = l1;
  47.     while (s[r1] && s[r1] != ' '&& s[r1] != '.' && s[r1] != ',') r1++;
  48.     r1--;
  49.     reverser(s, l1, r1);
  50.     l2 = r2;
  51.     while (s[l2] && s[l2] != ' '&& s[l2] != '.' && s[l2] != ',') l2--;
  52.     l2++;
  53.     reverser(s, l2, r2);
  54.     reverser(s, r1 + 1, l2 - 1);
  55. }
  56.  
  57.  
  58.  
  59. int main()
  60. {
  61.     setlocale(LC_ALL, "Russian");
  62.     cout << "Введите строку" << endl;
  63.     char *s = (char*)malloc(256 * sizeof(char));
  64.     gets_s(s, 256);
  65.     swapper(s);
  66.     printf("%s", s);
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement