Понимание синтаксического анализа данных в C ++ (для начинающих программистов) - PullRequest
0 голосов
/ 10 октября 2011

У меня есть данные в формате: (Данные могут быть введены в виде строки или из файла, по нашему выбору, но я предпочитаю строку)

Имя Фамилия Фамилия Число Дата Продолжительность

например, John Doe 5593711872 09122010 12

Мне нужно проанализировать эти данные и затем поместить их в класс «Контакты», по одному на каждую запись.

Затем мне нужно поместить 5 из этих записей в стек и распечатать их.

Я знаю, как это обрабатывать, но как мне разобрать и разбить эти данные на соответствующие разделы?

(редактировать, добавив небольшой фрагмент кода, который у меня есть. Я ищубольше для понимания, чем для кода, или это не так, как этот сайт работает?)

contact.h:

 #ifndef contact_h
#define contact_h

#include <iostream> //this is the set of functions we need to "overload" and break out
using std::ostream; //use both output halves
using stf::istream; //and input halves

#include <string>
using std::string;


class Contact
{
      friend ostream &operator<<( ostream &, const Contact & ); //from example 11.3 in powerpoint 3
      friend ostream &operator>>( istream &, Contact & ); //also from example 11.3 in powerpoint 3
private:
        string first;
        string last;
        string number;
        string date;
        int talk_time;
};

Phone.h

#ifndef phone_h
#define phone_h

#include <iostream> //this is the set of functions we need to "overload" and break out
using std::ostream; //use both output halves
using stf::istream; //and input halves

#include <string>
using std::string;

class Phone
{
      friend ostream &operator<<( ostream &, const Phone & ); 
      friend ostream &operator>>( istream &, Phone & ); 
private:
        string area; //area code segment
        string threes; //then the three-digit section
        string fours; //and lastly the four-digit section
};  //and this wraps up the phone class

date.h

#ifndef date_h
#define date_h

#include <iostream> //this is the set of functions we need to "overload" and break out
using std::ostream; //use both output halves
using stf::istream; //and input halves

#include <string>
using std::string;


class Date
{
      friend ostream &operator<<( ostream &, const Date & ); //from example 11.3 in powerpoint 3
      friend ostream &operator>>( istream &, Date & ); //also from example 11.3 in powerpoint 3
private:
        string month;
        string day;
        string year;
};  //and this wraps up the date storage class

main.cpp

    #include <iomanip>
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include "contact.h"
    #include "phone.h"
    #include "date.h"
    int main()
    {
//this is supposed to grab the numbers, and then i need something to grab the text and split it up
      char line_one[] = "Alex Liu 5592780000 06182011 15";
      char * pEnd;
      long int phone_number, date, minutes;
      phone_number = strtol (line_one,&pEnd,10);
      date = strtol (pEnd,&pEnd,10);
      minutes = strtol (pEnd,NULL,10);
      printf ("The numbers we get are: %ld, %ld, %ld.\n", phone_number, date, minutes);
      return 0;
    }

Является ли strtol неправильной функцией для использования здесь?

Да, это часть домашнего задания.Пожалуйста, не думайте, что я ищу бесплатный раздаточный материал, я действительно хочу научиться этому.Спасибо, ребята (и девушки тоже!)

Ответы [ 3 ]

2 голосов
/ 10 октября 2011

Итак, в основном вы хотите прочитать две строки и три целых числа. Основной способ сделать это в C ++ - использовать потоки:

std::string first_name, last_name;
std::int64_t number;
std::int32_t date, duration;

input_stream
    >> first_name >> last_name
    >> number >> date >> duration;

Где input_stream может быть либо std::istringstream, инициализированным из строки, которую вы получили в качестве ввода, либо std::ifstream, чтобы прочитать содержимое файла.

1 голос
/ 10 октября 2011

Простой способ анализа - использование потоков :

std::ifstream fin("my_file.txt");
std::string name1, name2;
int number1, number2, number3;
fin >> name1 >> name2 >> number1 >> number2 >> number3;
0 голосов
/ 10 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...