Как реализовать последовательность символов на с++
Как реализовать последовательность символов на с++
Вот сама программа
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;
}