Создать класс для работы со строками. Перегрузить (переопределить): деление операция “логический сдвиг вправо”

Разработать следующие элементы класса:

а. Поля: char *str; int n.

б. Конструктор, позволяющий создать строку из символов.

в. Методы, позволяющие: подсчитать количество пробелов в строке; заменить в строке все прописные символы на строчные; удалить из строки все знаки препинания.

г. Перегрузить (переопределить): деление операция “логический сдвиг вправо”

Трудности вызвал пункт г, подскажите пожалуйста как его сделать. Так же не откажусь от замечаний по коду

#include<iostream>
#include<cstdio>
#include <clocale>

using namespace std;

class String
{
    char* str;
    int n = 50;

public:
    String() {
        str = new char[n];
    };
    void Initialization() {
        cout << "Enter string: ";
        gets_s(str, n);
    }
    void PrintStr() {
        cout << str << endl;
    }
    void CountSpace() {
        int count = 0;
        for (int i = 0; i < strlen(str); i++) {
            if (str[i] == ' ')
                count++;
        }
        cout << count << endl;
    }
    void Replacement() {
        for (int i = 0; i < strlen(str); i++) {
            if ((str[i] != ' ') && (!ispunct(str[i])))
                str[i] -= 32;
        }
    }
    void Mark() {
        char* temp = new char[n];
        int j = 0;
        for (int i = 0; str[i] != '\0'; i++) {
            if (!ispunct(str[i])) {
                temp[j] = str[i];
                j++;
            }
        }
        temp[j] = '\0';
        memset(str, 0, n);
        for (int i = 0; temp[i] != '\0'; i++) {
            str[i] = temp[i];
        }
    }
};



int main()
{
    setlocale(LC_CTYPE, "rus");

    String obj1;
    obj1.Initialization();
    obj1.PrintStr();
    obj1.Replacement();
    obj1.PrintStr();
    return 0;
}

Ответы (1 шт):

Автор решения: Sergey Tatarincev
class String
{
    // ....
public:
    String() {
        str = new char[n]; memset(str,0,n); } // Лучше при создании буфера сразу его обнулять
    // ....
    void setString(char* newstr,int len){
        memset(str,0,n);
        memcpy(str,newstr,len);
    }
    
    friend operator>>(String& src,int num)
    {
        char* tmp = new char[src.n];
        memset(tmp,0,src.n);
        memcpy(tmp,&src.str[num],src.n-num);
        memcpy(src.str,tmp,src.n);
    }
};
int main(int argc, char **argv) {    
    
    String s;
    char str[10]="hello";
    s.setString(str,5);
    s.PrintStr();
    s>>2;
    s.PrintStr();
}
→ Ссылка