Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- using namespace std;
- class String
- {
- public:
- char* str;
- int len;
- String(const char* s, int length)
- {
- len = length;
- str = new char[len + 1];
- strncpy(str, s, len);
- str[len] = '\0';
- }
- String() : len{0}
- {
- str = new char[1];
- str[0] = '\0';
- }
- String(const char* s)
- {
- len = strlen(s);
- str = new char[len + 1];
- strcpy(str, s);
- }
- String(const String& other)
- {
- len = other.len;
- str = new char[len + 1];
- strcpy(str, other.str);
- }
- ~String()
- {
- delete[] str;
- str = nullptr;
- }
- String& operator=(const String& other)
- {
- if (this == &other)
- return *this;
- delete[] str;
- len = other.len;
- str = new char[len + 1];
- strcpy(str, other.str);
- return *this;
- }
- friend String operator+(const String& s1, const String& s2)
- {
- String result;
- result.len = s1.len + s2.len;
- result.str = new char[result.len + 1];
- strcpy(result.str, s1.str);
- strcat(result.str, s2.str);
- return result;
- }
- friend bool operator==(const String& s1, const String& s2)
- {
- return strcmp(s1.str, s2.str) == 0;
- }
- friend bool operator!=(const String& s1, const String& s2)
- {
- return !(s1 == s2);
- }
- char& operator[](int index)
- {
- return str[index];
- }
- int length() const
- {
- return len;
- }
- int index(const String& subst, int start=0){
- if (start < 0 || start >= len){
- return -1;
- }
- const char* found = strstr(str + start, subst.str);
- /*
- Функция ищет первое вхождение подстроки string2 в строке string1.
- Возвращает указатель на первое вхождение строки string2 в строку string1, или пустой указатель, если строка string2 не является частью строки string1.
- В данном поиске нуль-символ не учитывается.
- */
- if (found == nullptr){
- return -1;
- }
- return found - str;
- }
- friend std::istream& operator>>(std::istream& in, String& s)
- {
- char* buffer = new char;
- in >> buffer;
- s = String(buffer);
- delete buffer;
- return in;
- }
- friend std::ostream& operator<<(std::ostream& out, const String& s)
- {
- if (s.str == nullptr)
- {
- return out;
- }
- out << s.str;
- return out;
- }
- };
- int main(){
- while(1)
- {
- String s1, s2;
- std::cout <<"Введите первую строку: ";
- std::cin >> s1;
- std::cout <<"Введите вторую строку: ";
- std::cin >> s2;
- int start = 0;
- String result;
- while (start < s1.length())
- {
- int idx = s1.index(s2, start);
- if (idx == -1)
- {
- result = result + String(s1.str + start);
- break;
- }
- result = result + String(s1.str + start, idx - start);
- result = result + String("<") + s2 + String(">");
- start = idx + s2.length();
- }
- std::cout << "Результат: " << result << std::endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement