Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #pragma warning(disable: 4996)
- void Begin(char string[], int begin, int end, int *f);
- void End(char string[], int begin, int end, int *f);
- void Print(char string[], int k, int l, int n, int m);
- int Min(int begin1, int end1, int begin2, int end2);
- int Find(char string[], int i);
- char* ReadLine(void);
- int main(void)
- {
- char *str;
- int position, beginWord = 0, word = 0;
- int flag, f = 0;
- setlocale(LC_ALL, "Russian");
- do {
- printf("Введите строку: ");
- str = ReadLine();
- printf("Результат: ");
- for (position = 0; str[position] != 0; position++)
- {
- if (Find(str, position) != 0)
- word = word + 1;
- else
- {
- Begin(str, beginWord, word, &f);
- End(str, beginWord, word, &f);
- word = word + 1;
- beginWord = word;
- }
- }
- printf("\n");
- word = 0;
- beginWord = 0;
- f = 0;
- flag = str[0] != '\n';
- free(str);
- } while (flag);
- return 0;
- }
- char* ReadLine(void)
- {
- int i = 0, j = 1;
- char *str, *fstr, s;
- str = (char*)malloc(j * sizeof(char));
- do {
- s = getchar();
- fstr = str;
- j++;
- str = (char*)realloc(str, j * sizeof(char));
- if (str == NULL)
- free(fstr);
- str[i] = s;
- i++;
- } while (s != '\n');
- str[i] = '\0';
- return str;
- }
- void Begin(char string[], int begin, int end, int *f)
- {
- int i, e = 0, b = 0, beg = begin, min, w = b, j = 0;
- for (i = 0; i < begin; i++)
- {
- if (Find(string, i) != 0)
- e = e + 1;
- else
- {
- min = Min(w, e, beg, end);
- for (i = min; i > 0; i--)
- {
- if (string[beg] == string[e - i])
- {
- beg++;
- j++;
- }
- else
- beg = begin;
- }
- if ((beg != begin)&&(j > 1))
- {
- if (*f != 0)
- printf(",");
- if (*f != 0)
- printf(" ");
- Print(string, b, begin + j, e, end);
- ++(*f);
- }
- e = e + 1;
- b = e;
- i = b - 1;
- w = b;
- beg = begin;
- j = 0;
- }
- }
- }
- void End(char string[], int begin, int end, int *f)
- {
- int b = end + 1, e = end, beg = begin, i, w = end, min, j = 0;
- for (i = b; string[i] != 0; i++)
- {
- if (Find(string, i) != 0)
- e = e + 1;
- else
- {
- min = Min(w, e, begin, end);
- for (i = min; i > 0; i--)
- {
- if (string[beg] == string[e + 1 - i])
- {
- beg++;
- j++;
- }
- else
- beg = begin;
- }
- if ((beg != begin) && (j > 1))
- {
- if (*f != 0)
- printf(",");
- if (*f != 0)
- printf(" ");
- Print(string, b, begin + j, e + 1, end);
- ++(*f);
- }
- e = e + 1;
- b = e + 1;
- i = e;
- w = b;
- beg = begin;
- j = 0;
- }
- }
- }
- void Print(char word[], int k, int l, int n, int m)
- {
- int i, j;
- for (i = k; i < n; i++)
- printf("%c", word[i]);
- for (j =l; j < m; j++)
- printf("%c", word[j]);
- }
- int Min(int begin1, int end1, int begin2, int end2)
- {
- int min;
- if ((end1 - begin1) < (end2 - begin2))
- min = end1 - begin1;
- else
- min = end2 - begin2;
- return min;
- }
- int Find(char string[], int i)
- {
- return ((string[i] >= 'A' && string[i] <= 'Z') || (string[i] >= 'a' && string[i] <= 'z') || (string[i] >= '0' && string[i] <= '9'));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement