Как реализовать последовательность символов на с++

Как реализовать последовательность символов на с++

Вот сама программа

main.cpp

#include "string.h"

int main()
{
    int deistv, exit = 0;
    string fname;
    setlocale(LC_ALL, "Russian");

    ofstream fout;//("operator.txt", std::ofstream::out);
    ifstream fin;//("operator.txt", std::ifstream::in);

    MyString strA, strB;

    while (!exit) {
        cout << endl;
        cout << "1. Демонстрация присвоения A=B" << endl;
        cout << "2. Консольный ввод/вывод (cin>>A) (cout<<A)" << endl;
        cout << "3. Файловый вывод (f<<A) (B>>f)" << endl;
        cout << "4. Файловый вввод (A<<f) (f>>B)" << endl;
        cout << "5. Выход из программы" << endl << endl;
        cout << "Выберите действие (перегрузка операций): ";
        cin >> deistv;
        switch(deistv) {
            case 1:
                cout << "Строка А: ";
                cin >> strA;
                strB = strA; // наш оператор присвоения
                cout << "Новая строка B:" << endl;
                cout << strB;
                break;
            case 2:
                cout << "Введите строку А: ";
                cin >> strA;
                cout <<  "Вы ввели строку A:" << endl;
                cout << strA;
                break;
            case 3:
                fout.open("operator.txt", std::ofstream::out);
                cout<<"Введите строку А: ";
                cin>>strA;
                fout << strA;

                cout<<"Введите строку B: ";
                cin>>strB;
                strB >> fout;
                fout.close();
                break;
            case 4:
                fin.open("operator.txt", std::ifstream::in);
                strA << fin;
                cout << "Получена строка A из файла:" << endl;
                cout << strA;
                cout << endl;


                fin >> strB;
                cout << "Получена строка B из файла:" << endl;
                cout << strB;
                cout << endl;

                fin.close();
                break;
            case 5:
                exit++;
                break;
        }
    }
    return 0;
}

string.h

   #ifndef STRING_H
#define STRING_H

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

class MyString
{
    public:
        char *str;
        MyString();

        void operator = (MyString &obj);

        friend ostream &operator << (ostream &stream, MyString obj);
        friend istream &operator >> (istream &stream, MyString obj);

        friend ofstream &operator << (ofstream &stream, MyString obj);
        friend ifstream &operator >> (ifstream &stream, MyString obj);
        friend ofstream &operator >> (MyString obj, ofstream &stream);
        friend ifstream &operator << (MyString obj, ifstream &stream);

};

#endif // STRING_H

string.cpp

   #include "string.h"

#define MAX_STR_LEN 10

MyString::MyString()
{
    str = new char[MAX_STR_LEN+1]{};
}

// Присвоение
void MyString::operator = (MyString &obj)
{
    //printf("IN %s '%s'\n", __FUNCTION__, obj.str);
    strncpy(str, obj.str, MAX_STR_LEN);
}

// Вывод на консоль
ostream &operator << (ostream &stream, MyString obj)
{
    //printf("СOUT %s '%s'\n", __FUNCTION__, obj.str);
    stream.write(obj.str, MAX_STR_LEN);
    return stream;
}

// Ввод с консоли
istream &operator >> (istream &stream, MyString obj)
{
    string buffer;
    stream >> buffer;
    strncpy(obj.str, buffer.c_str(), MAX_STR_LEN);

    printf("CIN %s '%s'\n", __FUNCTION__, obj.str);
    return stream;
}

// Вывод в файл
ofstream &operator << (ofstream &stream, MyString obj)
{
    //printf("FOUT %s '%s'\n", __FUNCTION__, obj.str);
    stream.write(obj.str, MAX_STR_LEN);
    return stream;
}

ofstream &operator >> (MyString obj, ofstream &stream)
{
    //printf("FOUT %s '%s'\n", __FUNCTION__, obj.str);
    stream.write(obj.str, MAX_STR_LEN);
    return stream;
}


// Ввод из файла
ifstream &operator >> (ifstream &stream, MyString obj)
{
    stream.read(obj.str, MAX_STR_LEN);
    //printf("FIN %s '%s'\n", __FUNCTION__, obj.str);
    return stream;
}

ifstream &operator << (MyString obj, ifstream &stream)
{
    stream.read(obj.str, MAX_STR_LEN);
    //printf("FIN %s '%s'\n", __FUNCTION__, obj.str);
    return stream;
}

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