Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Задание 2
- #include <iostream>
- using namespace std;
- #include <ctime>
- void showMass(char* source) {
- for (short i = 0; i < _msize(source) / sizeof(source[0]); i++) {
- cout << source[i];
- }
- cout << endl;
- }
- //Задание 2-1
- void singleDelete(char*& source, int index) {
- char* result = new char[(_msize(source) / sizeof(source[0])) - 1];
- for (int i = 0; i < _msize(source) / sizeof(source[0]); i++) {
- if (i < index)result[i] = source[i];
- else if (i > index)result[i - 1] = source[i];
- }
- swap(source, result);
- delete[]result;
- cout << "Удалён символ c указанным индексом 1" << endl;
- }
- //Задание 2-2
- void specDelete(char*& source, char spec) {
- int counter = 0;
- for (int i = 0; i < _msize(source) / sizeof(source[0]); i++) {
- if (source[i] == spec)counter++;
- }
- if (counter > 0) {
- char* temp = new char[_msize(source) / sizeof(source[0]) - counter];
- for (int i = 0, j = 0; i < _msize(source) / sizeof(source[0]); i++) {
- if (source[i] != spec) temp[j++] = source[i];
- }
- swap(source, temp);
- delete[]temp;
- }
- cout << "Удалены все вхождения в строку указанного символа \"0\""<<endl;
- }
- //Задание 2-3
- void singleInsert(char*& source, int index, char spec) {
- char* result = new char[(_msize(source) / sizeof(source[0])) + 1];
- int i;
- for (i = 0; i < index; i++) result[i] = source[i];
- result[i++] = spec;
- for (i; i < (_msize(source) / sizeof(source[0])) + 1; i++) result[i] = source[i - 1];
- swap(source, result);
- delete[]result;
- cout << "Вставлен в строку в указанную позицию 1 заданный символ \"0\""<<endl;
- }
- int main()
- {
- //setlocale(LC_ALL, "RUS");
- srand(time(NULL));
- char* line = new char[3 + rand() % 21];
- cout << "Исходный случайный массив char" << endl;
- for (short i = 0; i < (_msize(line) / sizeof(line[0])) - 1; i++) {
- line[i] = ((i + 1) % 10) + 48;
- cout << line[i];
- }
- cout << endl;
- line[(_msize(line) / sizeof(line[0])) - 1] = '\0';
- singleDelete(line, 1);
- showMass(line);
- specDelete(line, '0');
- showMass(line);
- singleInsert(line, 1, '0');
- showMass(line);
- system("pause");
- system("cls");
- delete[]line;
- //Задание 2-4
- cout << "Введите строку для замены всех точек на восклицательные знаки: ";
- char*temp = new char[10000];
- cin.getline(temp, 10000);
- line = new char[strlen(temp) + 1];
- for (int i = 0; i <= strlen(temp); i++) {
- if (temp[i] == '.')line[i] = '!';
- else line[i] = temp[i];
- }
- delete[]temp;
- cout << line << endl;
- system("pause");
- system("cls");
- delete[]line;
- //Задание 2-5
- cout << "Введите строку для подсчёта повторений символа: ";
- temp = new char[10000];
- cin.getline(temp, 10000);
- cout << "Введите искомый символ: ";
- char input;
- cin >> input;
- int counter = 0;
- line = new char[strlen(temp) + 1];
- for (int i = 0; i <= strlen(temp); i++) {
- if (temp[i] == input)counter++;
- line[i] = temp[i];
- }
- delete[]temp;
- cout << line << endl;
- cout << "Заданный символ \"" << input << "\" " << counter << " раз(а) встречается в введённой строке" << endl;
- system("pause");
- system("cls");
- delete[]line;
- //Задание 2-6
- cout << "Введите строку для подсчёта типов символов в строке: ";
- temp = new char[10000];
- cin.ignore(std::numeric_limits<size_t>::max(), '\n');
- cin.getline(temp,10000);
- line = new char[strlen(temp) + 1];
- int digits = 0;
- int letters = 0;
- counter = 0;
- for (int i = 0; i <= strlen(temp); i++) {
- if (temp[i] > 47 && temp[i] < 58)digits++;
- 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++;
- else if (temp[i] != 32 && i != strlen(temp)) counter++;
- line[i] = temp[i];
- }
- delete[]temp;
- cout << line << endl;
- cout << "В введённой строке " << digits << " цифр, " << letters << " букв и " << counter << " остальных симолов." << endl;
- delete[]line;
- }
Add Comment
Please, Sign In to add comment