force1987

cin.ignore(std::numeric_limits<size_t>::max(), '\n');

Mar 31st, 2021 (edited)
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.22 KB | None | 0 0
  1. //Задание 2
  2. #include <iostream>
  3. using namespace std;
  4. #include <ctime>
  5.  
  6. void showMass(char* source) {
  7. for (short i = 0; i < _msize(source) / sizeof(source[0]); i++) {
  8. cout << source[i];
  9. }
  10. cout << endl;
  11. }
  12.  
  13. //Задание 2-1
  14. void singleDelete(char*& source, int index) {
  15. char* result = new char[(_msize(source) / sizeof(source[0])) - 1];
  16. for (int i = 0; i < _msize(source) / sizeof(source[0]); i++) {
  17. if (i < index)result[i] = source[i];
  18. else if (i > index)result[i - 1] = source[i];
  19. }
  20. swap(source, result);
  21. delete[]result;
  22. cout << "Удалён символ c указанным индексом 1" << endl;
  23. }
  24.  
  25. //Задание 2-2
  26. void specDelete(char*& source, char spec) {
  27. int counter = 0;
  28. for (int i = 0; i < _msize(source) / sizeof(source[0]); i++) {
  29. if (source[i] == spec)counter++;
  30. }
  31. if (counter > 0) {
  32. char* temp = new char[_msize(source) / sizeof(source[0]) - counter];
  33. for (int i = 0, j = 0; i < _msize(source) / sizeof(source[0]); i++) {
  34. if (source[i] != spec) temp[j++] = source[i];
  35. }
  36. swap(source, temp);
  37. delete[]temp;
  38. }
  39. cout << "Удалены все вхождения в строку указанного символа \"0\""<<endl;
  40. }
  41.  
  42. //Задание 2-3
  43. void singleInsert(char*& source, int index, char spec) {
  44. char* result = new char[(_msize(source) / sizeof(source[0])) + 1];
  45. int i;
  46. for (i = 0; i < index; i++) result[i] = source[i];
  47. result[i++] = spec;
  48. for (i; i < (_msize(source) / sizeof(source[0])) + 1; i++) result[i] = source[i - 1];
  49. swap(source, result);
  50. delete[]result;
  51. cout << "Вставлен в строку в указанную позицию 1 заданный символ \"0\""<<endl;
  52. }
  53.  
  54. int main()
  55. {
  56. //setlocale(LC_ALL, "RUS");
  57. srand(time(NULL));
  58. char* line = new char[3 + rand() % 21];
  59. cout << "Исходный случайный массив char" << endl;
  60. for (short i = 0; i < (_msize(line) / sizeof(line[0])) - 1; i++) {
  61. line[i] = ((i + 1) % 10) + 48;
  62. cout << line[i];
  63. }
  64. cout << endl;
  65. line[(_msize(line) / sizeof(line[0])) - 1] = '\0';
  66. singleDelete(line, 1);
  67. showMass(line);
  68. specDelete(line, '0');
  69. showMass(line);
  70. singleInsert(line, 1, '0');
  71. showMass(line);
  72. system("pause");
  73. system("cls");
  74. delete[]line;
  75.  
  76. //Задание 2-4
  77. cout << "Введите строку для замены всех точек на восклицательные знаки: ";
  78. char*temp = new char[10000];
  79. cin.getline(temp, 10000);
  80. line = new char[strlen(temp) + 1];
  81. for (int i = 0; i <= strlen(temp); i++) {
  82. if (temp[i] == '.')line[i] = '!';
  83. else line[i] = temp[i];
  84. }
  85. delete[]temp;
  86. cout << line << endl;
  87. system("pause");
  88. system("cls");
  89. delete[]line;
  90.  
  91. //Задание 2-5
  92. cout << "Введите строку для подсчёта повторений символа: ";
  93. temp = new char[10000];
  94. cin.getline(temp, 10000);
  95. cout << "Введите искомый символ: ";
  96. char input;
  97. cin >> input;
  98. int counter = 0;
  99. line = new char[strlen(temp) + 1];
  100. for (int i = 0; i <= strlen(temp); i++) {
  101. if (temp[i] == input)counter++;
  102. line[i] = temp[i];
  103. }
  104. delete[]temp;
  105. cout << line << endl;
  106. cout << "Заданный символ \"" << input << "\" " << counter << " раз(а) встречается в введённой строке" << endl;
  107. system("pause");
  108. system("cls");
  109. delete[]line;
  110.  
  111. //Задание 2-6
  112. cout << "Введите строку для подсчёта типов символов в строке: ";
  113. temp = new char[10000];
  114. cin.ignore(std::numeric_limits<size_t>::max(), '\n');
  115. cin.getline(temp,10000);
  116. line = new char[strlen(temp) + 1];
  117. int digits = 0;
  118. int letters = 0;
  119. counter = 0;
  120. for (int i = 0; i <= strlen(temp); i++) {
  121. if (temp[i] > 47 && temp[i] < 58)digits++;
  122. else if (temp[i] > 64 && temp[i] < 91 || temp[i]>96 && temp[i] < 123 || temp[i] == 168 || temp[i] == 184 || temp[i]>191 && temp[i] <= 255)letters++;
  123. else if (temp[i] != 32 && i != strlen(temp)) counter++;
  124. line[i] = temp[i];
  125. }
  126. delete[]temp;
  127. cout << line << endl;
  128. cout << "В введённой строке " << digits << " цифр, " << letters << " букв и " << counter << " остальных симолов." << endl;
  129. delete[]line;
  130. }
Add Comment
Please, Sign In to add comment