NickAndNick

Бестолковое задание

Aug 6th, 2014
180
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <locale.h>
  4.  
  5. #define BUFFER 256
  6.  
  7. void reverse(char*);
  8. void parse(char*, char*);
  9. void swap(char*, char*);
  10. void insert(char*, char*, char*);
  11.  
  12. int main() {
  13.     char str[] = " В харден ырднут, ырдыв в хартег,\n тярыТ в ардёв ардя вордек.\n утрыВ ердыв йортег удром,\n ардЯ в ардёв, урдыв - в урднут!";
  14.     char separator[] = ",.!?;: ";
  15.     setlocale(LC_CTYPE, "Russian_Russia.1251");
  16.     puts(str);
  17.     printf("\n");
  18.     parse(str, separator);
  19.     puts(str);
  20.     getchar();
  21. }
  22.  
  23. void parse(char* str, char* separator) {
  24.     char tmp[BUFFER];
  25.     char* token;
  26.     char* context = NULL;
  27.     strcpy_s(tmp, BUFFER, str);
  28.     token = strtok_s(tmp, separator, &context);
  29.     while (token != NULL) {
  30.         reverse(token);
  31.         insert(str, context, token);
  32.         token = strtok_s(NULL, separator, &context);
  33.     }
  34. }
  35.  
  36. void reverse(char* word) {
  37.     int beg = 0, end = strlen(word) - 1;
  38.     if (end) do swap(&word[beg], &word[end]); while (++beg < --end);
  39. }
  40.  
  41. void swap(char* a, char* b) {
  42.     char tmp = *a;
  43.     *a = *b;
  44.     *b = tmp;
  45. }
  46.  
  47. void insert(char* dest, char* context, char* src) {
  48.     int beg = strlen(dest) - strlen(context) - strlen(src) - 1;
  49.     int end = strlen(src) + beg;
  50.     int i = 0;
  51.     if (end) do dest[beg] = src[i++]; while (++beg < end);
  52. }
RAW Paste Data