Nano Hash - криптовалюты, майнинг, программирование

Чтение из файла (ifstream) и сортировка

Мне нужно прочитать из файла, а затем разбить строку на 3 строки. Формат следующий: A first_Secod_Third (три знака подчеркивания). Это домашнее задание, и они предлагают нам использовать getline и игнорировать. так что я:

    main()
    ifstream inf("file.txt")
    while(inf)
    {inf >> class1;
    cout << class1;
    }
    class THECLASS
    {string a, b, c;
    public:
    friend void operator>>(ifstream &inf, THECLASS &class1)
    {getline(inf, class1.a, '_');
    inf.ignore();
    inf.ignore();
    [if I put getline class1.b, the whole line will go into it, overwriting .a]
    }

and in operator<<, I have

    os << class1.a << class1.b;
    return os;

Но все, что я получаю, когда я cout ‹‹ class1, это все три поля входного файла без _, каждое на новой строке. Когда я попытался использовать функцию get(), компилятор не распознал ее, хотя я объявил fstream. Каков общий алгоритм действий?

27.05.2012

Ответы:


1

Надеюсь, это поможет вам.

// assume the content of infile : 
//First1_xxSecond1_xxThird1
//Firts2_xxSecond2_xxThird2
//First3_xxSecond3_xxThird3
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class MyClass
{   
public:
    string a, b, c;
};
ifstream& operator>>(ifstream &inf, MyClass& class1)
{
    getline(inf, class1.a, '_');    //"First" into class1.a
    inf.ignore(2,EOF);              //skip "xx"
    getline(inf, class1.b, '_');
    inf.ignore(2, EOF);
    getline(inf, class1.c);
    return inf;
}
ostream&  operator<<(ostream& out, const MyClass& class1)
{
    out<< class1.a << "_"<< class1.b<< "_" << class1.c;
    return out;  
}
int main () { 
    MyClass class1;
    ifstream  stream("test.txt");
    while(stream.rdstate()  != ifstream::eofbit)
    {
        stream >> class1;
        cout << class1 <<"\n";  //First1_Second1_Third1 for the first loop.ect
    }
    return 0;
}
27.05.2012
  • На самом деле там три индекса. В этом случае мне понадобятся два оператора inf.ignore(), верно? Тем не менее, для моей самой последней записи он правильно читает b c, а затем создает еще b и c. Я думаю, что есть проблема с моим классом, хотя.... 27.05.2012
  • извините за неправильное понимание, вы хотите, чтобы First_Second_Third был выходным форматом? Я просто подумал, что это формат информации, можете ли вы дать мне формат исходных данных? если вам нужен выходной формат, в операторе ‹‹ os ‹‹ class1.a ‹‹ _ ‹‹ class1.b ; 27.05.2012
  • Спасибо за работу, Тикс! Ваш первый код помог мне решить эту проблему. Я добавил одну дополнительную строку в inf, потому что у меня не было инструкции break в нужном месте, но в остальном все работало отлично! 27.05.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..