Здравствуйте, я реализую свой класс String
и создаю свой класс `City.
include <iostream>
#include <string>
#include "String.h"
#include <fstream>
#include <vector>
#define string String
#define END std::endl
class City
{
private:
string Name;
int Ppl;
double Area;
int Birth;
int Schools;
public:
City();
~City();
void showInfo();
void getData();
void write(char *fileName);
void read(char *fileName);
};
Мне нужно записать мою информацию в бинарный файл. Для этого я реализую два метода write
и read
, в которые приходит один аргумент имя файла, так как моя программа работает с аргументами, одним из них я передаю имя файла.
Моя проблема заключается в следующем:
Мои методы используют такие функции, которые не могут работать с моим String
.
Это с_str, size(). Вы бы не могли мне помочь с реализацией этих функций?
#include "City.h"
#include "String.h"
#include "TCharArray.h"
#include <iostream>
#include <fstream>
#include <io.h>
#include <vector>
City::City() : Name("NoName"), Ppl(0), Area(0.0), Birth(0), Schools(0)
{}
City::~City()
{
}
void City::showInfo() {
std::cout << "Name\t\t" << "People\t\t" << "Area\t\t" << "Birth\t\t" << "Schools\t\t" << END;
std::cout <<""<<Name<<"\t\t" << Ppl<<"\t\t" << Area<<"\t\t" << Birth<<"\t\t" << Schools<< END;
}
void City::getData()
{
std::cout << "Enter a name of the city: ";
(std::cin >> Name).get();
std::cout << "Enter quanity of people in the city: ";
std::cin >> Ppl;
std::cout << "Enter area of the city: ";
std::cin >> Area;
std::cout << "Enter a year of foundation of the city: ";
std::cin >> Birth;
std::cout << "Enter quanity of schools in the city: ";
std::cin >> Schools;
}
void write(char *fileName)
{
std::vector<string>words;
std::fstream tab(fileName, std::ios::binary | std::ios::out);
for (size_t i = 0; i < words.size(); i++)// size() не может работать с моим String
{
size_t size = words[i].size();// size() не может работать с моим String
// пишем в файл длину строки:
tab.write((char *)&size, sizeof(size));
// теперь саму строку:
tab.write(words[i].c_str(), size);// с_str не может работать с моим String
}
tab.close();
}
void read(char *fileName)
{
std::vector<string>words;
std::fstream show(fileName, std::ios::binary | std::ios::in);
for (size_t i = 0; i < words.size(); i++)// size() не может работать с моим String
{
size_t size;
// читаем длину очередной строки:
show.read((char *)&size, sizeof(size));
// читаем саму строку:
char buf[size + 1];
show.read(buf, size);
buf[size] = 0;
}
show.close();
}
Ну у вас используется
vector<string> words -> words.size() == 0
А реализация обычная
size_t size() const noexcept
{
return len;
}
const char* c_str() const noexcept
{
return data;
}
ссылка на свою реализацию string (если надо): https://github.com/leprik0n/str
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Приветствую дамы и господаНе могу автоматически "зацепить" директорию gtkmm с помощью CMake