Bertran_rz

Untitled

Oct 28th, 2021 (edited)
560
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. /*
  6. Написать свою функцию:
  7. * подсчета символов в строке
  8. * копирования из одной строки в другую (аналог strcpy)
  9. - копирования части строки (аналог strncpy. Исправить функцию так,
  10. чтоб она ставила ноль-терминатор в конце текста в отличии от "старшего брата"
  11. - сравнение строк (аналог strcmp)
  12. - поиск символа в строке (аналог strchr, но написать функцию так, чтоб она возвращала
  13. номер символа в строке или -1, если символа нет)
  14. */
  15.  
  16. //Узнаем длинну строки
  17. int lengthstr(char* str)
  18. {
  19.     int count = 0;
  20.    
  21.     for(int i = 0; str[i] != '\0'; i++)
  22.         count++;
  23.     return count;
  24. }
  25.  
  26. //копируем строки
  27. //if variable is new
  28. char* copystr(char* str)
  29. {
  30.     char* tmp = nullptr;
  31.  
  32.     tmp = new char[lengthstr(str)+1];
  33.  
  34.     for(int i = 0; str[i] != '\0'; i++)
  35.         tmp[i] = str[i];
  36.  
  37.     tmp[lengthstr(str)] = '\0';
  38.    
  39.     return tmp;
  40. }
  41.  
  42. //if variable isn't new
  43. void copystr(char* str, char*& tostr)
  44. {
  45.     char* tmp = nullptr;
  46.  
  47.     tmp = new char[lengthstr(str)+1];
  48.  
  49.     for(int i = 0; str[i] != '\0'; i++)
  50.         tmp[i] = str[i];
  51.  
  52.     tmp[lengthstr(str)] = '\0';
  53.    
  54.     delete[] tostr;
  55.  
  56.     tostr = tmp;
  57. }
  58.  
  59. //копируем часть строки
  60. void copystr(char* str, char*& tostr, int start, int finish)
  61. {
  62.     char* tmp = new char[finish - start + 2];
  63.  
  64.     for(int i = start, j = 0; i <= finish; i++, j++)
  65.         tmp[j] = str[i];
  66.  
  67.     tmp[finish - start + 1] = '\0';
  68.    
  69.     delete[] tostr;
  70.  
  71.     tostr = tmp;
  72. }
  73.  
  74. //сравниваем строки
  75. bool compstr(char* str1, char* str2)
  76. {
  77.     if(lengthstr(str1) != lengthstr(str2)) return false;
  78.  
  79.     for(int i = 0; str1[i] != '\0' || str2[i] != '\0'; i++)
  80.     {
  81.         if(str1[i] != str2[i])
  82.         {
  83.             return false;
  84.         }
  85.     }
  86.     return true;
  87. }
  88.  
  89. //ищем тайный смысл
  90. int searchchar(char* str, char chr)
  91. {
  92.     for(int i = 0; str[i] != '\0'; i++)
  93.         if (str[i] == chr) return i;
  94.  
  95.     return -1;
  96. }
  97.            
  98.  
  99. int main()
  100. {
  101.     char* str = nullptr;
  102.  
  103.     char tmp[100];
  104.     cout << "Enter your text\n";
  105.     cin.getline(tmp,100);
  106.  
  107.     // тестим опридилятор длин
  108.     str = new char[lengthstr(tmp)+1];
  109.     //тестим копирование строк
  110.     copystr(tmp, str);
  111.     //снова длины :D
  112.     cout <<  str << "(" << lengthstr(str) << ")" << endl;
  113.    
  114.     //копируем но не все как на контрольной у соседа
  115.     copystr(tmp, str, 2, 3);
  116.     cout << str << endl;
  117.  
  118.     //тестим как там с сравнениями
  119.     char srt[] = "hello";
  120.     char srt2[] = "helle";  
  121.  
  122.     cout << compstr(srt, srt2) << endl;
  123.     //ищем символы
  124.     cout << searchchar(srt, 'h') << endl;
  125.     cout << searchchar(srt2, 'e') << endl;
  126.     cout << searchchar(srt, 'z') << endl;
  127. }
  128.  
  129.  
RAW Paste Data