Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #define _USE_MATH_DEFINES
- #include <math.h>
- #include <string.h>
- #include <stdlib.h>
- using namespace std;
- void strinsi(char* str, char* substr, unsigned* i);
- int lengthString(char*);
- char* Strcpy1(char* dst, char* src);
- int main()
- {
- setlocale(LC_ALL, "Russian");
- long n;
- char ex = 'n';
- do {
- cout << "Введите номер задания: " << endl;
- char task;
- cin >> task;
- switch (task)
- {
- case '1': {
- /*даны две строки str1 и str2, символ symbol и целое n. заменить в строке str1 n символов, начиная с последнего символа symbol на подстроку строки str2,
- начинающуюся с символа symbol и заканчивающуюся концом строки str2*/
- char* str1 = new char[12];
- char* str2 = new char[10];
- char* temp1 = new char[20];
- char* symbol = new char;
- int n;
- cout << "Enter str1: " << endl;
- //cin >> str1;
- getchar(); //чтобы \n не попал в ввод
- scanf("%s", str1);
- cout << "Enter str2: " << endl;
- //cin >> str2;
- getchar();
- scanf("%s", str2);
- cout << "Enter symbol: " << endl;
- cin >> symbol;
- cout << "Enter n: " << endl;
- cin >> n;
- _strrev(str2);
- str2 = strtok(str2, symbol);//берем из реверсной строки подстроку до символа без него
- _strrev(str2);//обратно
- int a = strlen(str1);
- int b = strlen(str2);
- if (b >= n)
- {
- b = n - 1;//количество символов из строки 2,на которое мы заменяем
- }
- memset(temp1, 0, 20);
- //*temp1 = 0;
- strcpy(temp1, str1);
- _strrev(temp1);
- temp1 = strstr(temp1, symbol);
- _strrev(temp1); //здесь строка уже прямая с символом на конце*/
- int i = a - strlen(temp1) - b;//находим, сколько символов дописать в конце
- strcat(temp1, str2);//соединяем
- if (strlen(temp1) < a)
- {
- memset(str2, 0, 10);
- //*str2 = 0;//очищаем
- _strrev(str1);//переворачиваем, чтобы взять символы с конца
- strncat(str2, str1, i);//берем символы с конца
- _strrev(str2);//реверс
- strncat(temp1, str2, i);//соединяем воедино
- }
- printf("%s", temp1);
- break;
- }
- case '2': {
- /*дан текст, в котором слова разделены одинарным символом пробела, и какая-то буква. Вывести все слова, в которых встречается эта буква.*/
- char ch;//символы текста
- char symbol;//искомый символ
- cout << "Enter symbol: " << endl;
- cin >> symbol;
- cout << "Enter str1: " << endl;
- cin.get(ch);//убираем \n после symbol
- while (cin.fail() == false)//пока есть, что вводить
- {
- cin.get(ch);// считываем первый символ
- int count = 0;//счетчик искомого символа
- int i = 0;//счетчик индеска массива
- char* mas = new char[20];//массив, в который записываем слово
- *mas = 0;
- while ((ch != ' ') && (ch != '\n'))
- {
- mas[i] = ch;
- i++;
- if (ch == symbol)//если искомый символ
- {
- count++;
- }
- cin.get(ch);//следующий символ
- }
- if (count != 0)
- {
- for (int j = 0; j < i; j++)
- {
- cout << mas[j];
- }
- cout << endl;
- }
- delete[] mas;
- }
- break;
- }
- case '3': {
- /*написать ф-цию, вставляющую заданную подстроку в строку-источник в каждую из позиций, заданных массивом индексов*/
- char* stroka1 = new char[15];
- char* stroka2 = new char[5];
- int n;
- cout << "Enter number of pastes: " << endl;
- cin >> n;
- unsigned int* mas = new unsigned int[n + 1];
- cout << "Enter positions: " << endl;
- mas[0] = n; //количество вставок
- for (int i = 1; i < n + 1; i++)
- {
- cin >> *(mas + i);
- }
- cout << "Enter stroka1: ";
- getchar(); //чтобы \n не попал в ввод
- scanf("%s", stroka1);
- cout << "Enter stroka2: ";
- getchar();
- scanf("%s", stroka2);
- strinsi(stroka1, stroka2, mas);//
- break;
- }
- default: {cout << "Нет такой задачи.\n"; } break;
- }
- cout << "Если вы хотите выйти, нажмите \'y\', в противном случае-любую другую клавишу" << endl;
- cin.ignore(100, '\n');
- cin >> ex;
- } while (ex != 'y');
- return 0;
- }
- int lengthString(char* stroka)
- {
- int i;
- for (i = 0; *(stroka + i) != '\0'; i++); ////////////[]
- return i;
- }
- char* Strcpy1(char* dst, char* src)
- {
- char* pt = dst;
- while (*src)
- *(dst++) = *(src++);
- *dst = 0;
- return pt;
- }
- void strinsi(char* str, char* substr, unsigned* i)
- {
- int count = 0;
- int n = *i;///
- for (int j = 1; j < (n + 1); j++)
- {
- int l1 = lengthString(str);
- int l2 = lengthString(substr);
- char* rezult_str = new char[l1 + l2 + 1]; // строка - сборка +1 для символа конца строки
- (*(i+j))--;///
- int poz = *(i+j) + count * l2;///
- for (int x = 0; x < poz; x++) // копируем часть первой строки до нужного индекса
- *(rezult_str + x) = *(str + x);
- for (int x = 0; x < l2; x++) //добавляем вставляемую строку
- *(rezult_str + x + poz) = *(substr + x);
- for (int x = poz; *(str + x) != 0; x++) //добавляем оставшуюся часть первой строки///////////
- *(rezult_str + x + l2) = *(str + x);/////////////
- *(rezult_str + l1 + l2) = '\0';///////////////
- Strcpy1(str, rezult_str);
- count++;
- }
- cout << "Result: ";
- printf("%s", str);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement