Advertisement
dimonstrer

Untitled

Oct 17th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <locale.h>
  4.  
  5. using namespace std;
  6. char s[] = "012345";
  7. char dest[] = "OPA NA";
  8.  
  9. void strdel1(char *s, int p, int k) {
  10.     int lens = strlen(s);
  11.     if (p > lens)
  12.         return;
  13.     if (p + k > lens) {
  14.         s[p] = '\0'; return;
  15.     }
  16.     if (p < 0) p = 0;
  17.     if (k < 0) k = 0;
  18.     for (int i = p + k; i <= lens; ++i)
  19.         s[i - k] = s[i];
  20. }
  21.  
  22. void strdel2(char *s, int p, int k)
  23. {
  24.     int lens = strlen(s);
  25.     if (p > lens)
  26.         return;
  27.     if (p + k > lens) {
  28.         s[p] = '\0'; return;
  29.     }
  30.     if (p < 0) p = 0;
  31.     if (k < 0) k = 0;
  32.     s += p;
  33.     for (int i = k; s[i - 1]; ++i)
  34.         s[i - k] = s[i];
  35. }
  36.  
  37. void strdel3(char *s, int p, int k)
  38. {
  39.     int lens = strlen(s);
  40.     if (p > lens)
  41.         return;
  42.     if (p + k > lens) {
  43.         s[p] = '\0'; return;
  44.     }
  45.     if (p < 0) p = 0;
  46.     if (k < 0) k = 0;
  47.     s += p;
  48.     char *s1 = s + k;
  49.     while (*s++ = *s1++);
  50. }
  51.  
  52. int mystrlen1(char *s)
  53. {
  54.     int len = 0;
  55.     for (len = 0; s[len]; ++len);
  56.     return len;
  57. }
  58.  
  59. int mystrlen2(char *s)
  60. {
  61.     return(*s) ? mystrlen2(++s) + 1 : 0;
  62. }
  63.  
  64. int mystrlen3(char *s)
  65. {
  66.     int len = 0;
  67.     while (s[len]) len++;
  68.     return len;
  69. }
  70.  
  71. char* mystrcpy1(char *dest, char *s, int p, int k) {
  72.     int lens = strlen(s);
  73.     if (p > lens)
  74.         return dest;
  75.     if (p + k > lens) {
  76.         k = lens - p;
  77.     }
  78.     if (p < 0) p = 0;
  79.     if (k < 0) k = 0;
  80.     int tmp = strlen(dest);
  81.     char *tmp2 = new char[255];
  82.     for (int i = 0; i < tmp+k; ++i)
  83.         if (i<tmp)
  84.         tmp2[i] = dest[i];
  85.         else {
  86.             tmp2[i] = s[p];
  87.             ++p;
  88.         }
  89.     for (int i = 0; i <= tmp + k; ++i)
  90.         if (i < tmp + k)
  91.         dest[i] = tmp2[i];
  92.         else
  93.         dest[tmp+k] = 0;
  94.     delete[] tmp2;
  95.     return dest;
  96. }
  97.  
  98. char* mystrcpy2(char *dest, char *s, int p, int k) {
  99.     int lens = strlen(s);
  100.     if (p > lens)
  101.         return dest;
  102.     if (p + k > lens) {
  103.         k = lens - p;
  104.     }
  105.     if (p < 0) p = 0;
  106.     if (k < 0) k = 0;
  107.     int tmp = strlen(dest);
  108.     for (int i = p; i < p + k; ++i, tmp++)
  109.         dest[tmp] = s[i];
  110.     dest[tmp] = 0;
  111. }
  112.  
  113. char* mystrcpy3(char *dest, char *s, int p, int k) {
  114.     int lens = strlen(s);
  115.     if (p > lens)
  116.         return dest;
  117.     if (p + k > lens) {
  118.         k = lens - p;
  119.     }
  120.     if (p < 0) p = 0;
  121.     if (k < 0) k = 0;
  122.  
  123. }
  124. void testdel()
  125. {
  126.     char t[100];
  127.     int p[] = { 3, 0, 3, 30, 3, 3, 1 };
  128.     int k[] = { 2, 3, 3, 1, 10, 0, 1 };
  129.     for (int i = 0; i < 7; i++) {
  130.         strcpy_s(t, s);
  131.         printf("Исходная строка: %s\n", t);
  132.         strdel1(t, p[i], k[i]);
  133.         printf("Полученная строка при p=%i, k=%i del1: %s\n", p[i], k[i], t);
  134.         strcpy_s(t, s);
  135.         strdel2(t, p[i], k[i]);
  136.         printf("Полученная строка при p=%i, k=%i del2: %s\n", p[i], k[i], t);
  137.         strcpy_s(t, s);
  138.         strdel3(t, p[i], k[i]);
  139.         printf("Полученная строка при p=%i, k=%i del3: %s\n", p[i], k[i], t);
  140.     }
  141. }
  142.  
  143. void testlen()
  144. {
  145.     char t[] = "";
  146.     printf("Тест обычной строки len 1. Кол-во символов: %i\n", mystrlen1(s));
  147.     printf("Тест пустой строки len 1. Кол-во символов: %i\n", mystrlen1(t));
  148.     printf("Тест обычной строки len 2. Кол-во символов: %i\n", mystrlen2(s));
  149.     printf("Тест пустой строки len 2. Кол-во символов: %i\n", mystrlen2(t));
  150.     printf("Тест обычной строки len 3. Кол-во символов: %i\n", mystrlen3(s));
  151.     printf("Тест пустой строки len 3. Кол-во символов: %i\n", mystrlen3(t));
  152. }
  153.  
  154. void testcpy() {
  155.     int p[] = { 3, 0, 3, 30, 3, 3, 1 };
  156.     int k[] = { 2, 3, 3, 1, 10, 0, 1 };
  157.     char t[255]=" ";
  158.     strcpy_s(t, dest);
  159.     printf("Начальная строка dest: %s ; начальная строка s: %s \n", t, s);
  160.     for (int i = 0; i < 7; i++) {
  161.         strcpy_s(t, dest);
  162.         mystrcpy2(t, s, p[i], k[i]);
  163.         printf("Итоговая строка dest при k = %i; p = %i : %s;\n", k[i], p[i], t);
  164.     }
  165. }
  166.  
  167. void funcchs()
  168. {
  169.     int tmp, chs;
  170.     do {
  171.         printf("Выберите функцию: \n1 - strdel; \n2 - strlen; \n3 - strcpy.\n");
  172.         printf("Нажмите любую клавишу, чтобы выйти из программы.\n");
  173.         cin >> tmp;
  174.         chs = (int)tmp;
  175.         switch (chs) {
  176.         case 1:
  177.             testdel(); break;
  178.         case 2:
  179.             testlen(); break;
  180.         case 3:
  181.             testcpy(); break;
  182.         default:
  183.             chs = 0;
  184.             break;
  185.         }
  186.     } while (chs != 0);
  187. }
  188.  
  189.  
  190. int main()
  191. {
  192.     setlocale(LC_ALL, "Russian");
  193.     char s[] = "012345";
  194.     funcchs();
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement