Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;从文本文件中读取字符串并逐字保存到linkedlist中 我被指定写一个房间预订系统的C++程序。我知道如何逐行读取文本文件并保存它。但我的问题是如何逐字阅读文本文件_C++_File_Linked List - Fatal编程技术网

C++;从文本文件中读取字符串并逐字保存到linkedlist中 我被指定写一个房间预订系统的C++程序。我知道如何逐行读取文本文件并保存它。但我的问题是如何逐字阅读文本文件

C++;从文本文件中读取字符串并逐字保存到linkedlist中 我被指定写一个房间预订系统的C++程序。我知道如何逐行读取文本文件并保存它。但我的问题是如何逐字阅读文本文件,c++,file,linked-list,C++,File,Linked List,这是我的文本文件: 1-Reserved-2018-12-23-Lecture Room-13 2-Reserved-2018-11-34-Tutorial Room-15 3-Not Reserved-0-0-0-Design Studio-18 4-Reserved-2018-11-16-Lecture Room-14 5-Not Reserved-0-0-0-Exam Hall-18 1-Reserved-2018-12-23-Lecture Room-13 2-Reserved-201

这是我的文本文件:

1-Reserved-2018-12-23-Lecture Room-13
2-Reserved-2018-11-34-Tutorial Room-15
3-Not Reserved-0-0-0-Design Studio-18
4-Reserved-2018-11-16-Lecture Room-14
5-Not Reserved-0-0-0-Exam Hall-18
1-Reserved-2018-12-23-Lecture Room-13
2-Reserved-2018-11-34-Tutorial Room-15
3-Not Reserved-0-0-0-Design Studio-18
4-Reserved-2018-11-16-Lecture Room-14
5-Not Reserved-0-0-0-Exam Hall-18
我想读取文本文件并将单词保存到其中。(如<代码> ID <代码>,<代码>数据< /代码>,代码>房间类型< /代码>等)C++中有什么办法?< /p> 这是我的班级:

class room {

public:

    int length;
    int initial;

    enum class roomType { main_hall, exam_hall, lecture_room, tutorial_room, design_studio, meeting_room };
    struct node {

        string data;
        int id;
        int capacity;
        int year, month, day;
        int deleteDate;
        roomType type;
        node* next;
    };
    node* front;
    node * tail;
    room() {
        length=0;
        initial=1;

        front = NULL;
        tail = NULL;
    }

    bool isFull () { return length>=20; }


    // Add Rooms
    void room::addRoom() {
        system("cls");

   if (isFull()) {

       cout<<"    No more than 25 rooms are allowed\n"<<endl;
       return;
   }

        cout << "Enter the capacity" << endl;
        int a;
        cin >> a;

        node* temp = new node();
        temp->data = "Not Reserved";
        temp->id = initial;
        temp->year = 0;
        temp->month = 0;
        temp->day = 0;
        temp->deleteDate = 0;

        initial++;
        temp->capacity = a;
        temp->next = NULL;
        if (front == NULL && tail == NULL)
        {
            front = temp;
            tail = temp;
        }
        else {
            tail->next = temp;
            tail = temp;
        }
        cout << "Choose The type" << endl;
        cout << "1- Main Hall \t 2- Lecture Room \t 3- Exam Hall \t 4- Meeting Room \t 5- Design Studio \t 6- Tutorial Room" << endl;
        int t;
        cin >> t;
        if (t == 1)
        {
            temp->type = roomType::main_hall;

        }
        else if (t == 2)
        {
            temp->type = roomType::lecture_room;

        }
        else if (t == 3)
        {
            temp->type = roomType::exam_hall;


        }
        else if (t == 4)
        {
            temp->type = roomType::meeting_room;


        }
        else if (t == 5)
        {
            temp->type = roomType::design_studio;


        }
        else if (t == 6)
        {
            temp->type = roomType::tutorial_room;


        }
        else {cout << "Wrong Input!" << endl;}
        length++;
        cout<<"\n Successfully Created!\n\n";
        system("pause");
        save();
    }
    void reserveRoom()
    {
        system("cls");
        show();
        cout << "=============================================================" << endl;
        cout << "Enter the room ID you want to Book !" << endl;
        int id;
        cin >> id;
        node* tmp = front;

        while (tmp != NULL) {
            if (tmp->id == id) {
                if(tmp->data == "Not Reserved"){
                tmp->data = "Reserved";
                int y,m,d;

                cout << "Enter the year " << endl;
                cin >> y;

                cout << "Enter the month " << endl;
                cin >> m;

                cout << "Enter the day " << endl;
                cin >> d;

                tmp->year = y;
                tmp->month = m;
                tmp->day = d;
                tmp->deleteDate = y+m+d;


                cout << "Room Reserved!" << endl;
                }
                else{
                    cout << "This room has been reserved!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;

                }
            }
            tmp = tmp->next;
        }
        system("pause");
        room::save();

    }
};
教室{
公众:
整数长度;
int首字母;
enum教室类型{主教室、考试大厅、演讲室、辅导室、设计工作室、会议室};
结构节点{
字符串数据;
int-id;
国际能力;
整数年、月、日;
删除日期;
房间型;
节点*下一步;
};
节点*前端;
节点*尾部;
房间(){
长度=0;
初始值=1;
front=NULL;
tail=NULL;
}
bool isFull(){返回长度>=20;}
//添加房间
空房间::添加房间(){
系统(“cls”);
如果(isFull()){
coutmonth=0;
温度->日=0;
temp->deleteDate=0;
初始++;
温度->容量=a;
temp->next=NULL;
如果(前==NULL&&tail==NULL)
{
前=温度;
尾=温度;
}
否则{
尾部->下一步=温度;
尾=温度;
}
cout type=roomType::演讲室;
}
else如果(t==3)
{
温度->类型=房间类型::考试大厅;
}
else如果(t==4)
{
临时->类型=房间类型::会议室;
}
else如果(t==5)
{
临时->类型=房间类型::设计工作室;
}
else如果(t==6)
{
temp->type=roomType::tutorial\u room;
}
否则{cout day=d;
tmp->deleteDate=y+m+d;
库特
我知道如何逐行读取文本文件并保存它
问题是如何逐字阅读文本文件

这是我的文本文件:

1-Reserved-2018-12-23-Lecture Room-13
2-Reserved-2018-11-34-Tutorial Room-15
3-Not Reserved-0-0-0-Design Studio-18
4-Reserved-2018-11-16-Lecture Room-14
5-Not Reserved-0-0-0-Exam Hall-18
1-Reserved-2018-12-23-Lecture Room-13
2-Reserved-2018-11-34-Tutorial Room-15
3-Not Reserved-0-0-0-Design Studio-18
4-Reserved-2018-11-16-Lecture Room-14
5-Not Reserved-0-0-0-Exam Hall-18
从我上面的评论继续,每当您在一行中用分隔符分隔单词时,标准方法是使用
getline
将每一行分隔成
string
,然后使用
getline
从该行创建
stringstream
,将每个单词读入
string
>使用指定的分隔符

为什么用
getline
读一行,用
getline
读一行
stringstream

回答:线路控制

虽然您可以使用
getline
和分隔每个单词的分隔符直接读取文件,但您如何知道一行何时结束,下一行何时开始?当您指定要与
getline
一起使用的分隔符时,
getline
将一直读取,直到找到分隔符或输入结束或
str。已读取最大大小
字符。请参阅。因此,在本例中,
'\n'
结尾的行没有特殊意义

但是,如果您将整行读入一个
string
,然后从该行创建一个
stringstream
,您知道您只能读取到行尾,因为这将触发输入时的文件结束条件。因此,即使您使用带分隔符的
getline
,它现在也只能读取到行尾

使用此方法并使用数据文件的一个简短示例将展示如何将每一行分隔为单词,然后添加到列表的每个节点,例如

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

int main (int argc, char **argv) {

    std::string line;   /* string to hold each line */

    if (argc < 2) {     /* validate at least 1 argument given */
        std::cerr << "error: insufficient input.\n"
                "usage: " << argv[0] << " filename\n";
        return 1;
    }

    std::ifstream f (argv[1]);  /* open file */
    if (!f.is_open()) {         /* validate file open for reading */
        perror (("error opening file " + std::string(argv[1])).c_str());
        return 1;
    }

    while (getline (f, line)) {         /* read each line into line */
        std::string word;               /* string to hold words */
        std::stringstream s (line);     /* create stringstream from line */
        while (getline (s, word, '-'))  /* read hyphen separated words */
            std::cout << word << '\n';  /* output words */
        std::cout << '\n';  /* tidy up with newline between data */
    }
}
示例使用/输出

注意,上面的代码只是在每行分隔的字之间输出一个额外的
'\n'
。您可以编写逻辑(可能使用计数器,例如,对于任何需要的转换,使用
stoi
)将值转换为整数值,并将每个值存储在适当的字段中

$ ./bin/getline_hyphen ../dat/hyphenstr.txt
1
Reserved
2018
12
23
Lecture Room
13

2
Reserved
2018
11
34
Tutorial Room
15

3
Not Reserved
0
0
0
Design Studio
18

4
Reserved
2018
11
16
Lecture Room
14

5
Not Reserved
0
0
0
Exam Hall
18
您还可以从每行中删除分隔符,创建一个不带连字符的单独的
stringstream
,并使用
>
读取和转换每个节点的值。(第二种方法留给您)

仔细检查一下,如果你还有其他问题,请告诉我

我知道如何逐行读取文本文件并保存它 问题是如何逐字阅读文本文件

这是我的文本文件:

1-Reserved-2018-12-23-Lecture Room-13
2-Reserved-2018-11-34-Tutorial Room-15
3-Not Reserved-0-0-0-Design Studio-18
4-Reserved-2018-11-16-Lecture Room-14
5-Not Reserved-0-0-0-Exam Hall-18
1-Reserved-2018-12-23-Lecture Room-13
2-Reserved-2018-11-34-Tutorial Room-15
3-Not Reserved-0-0-0-Design Studio-18
4-Reserved-2018-11-16-Lecture Room-14
5-Not Reserved-0-0-0-Exam Hall-18
从我上面的评论继续,每当您在一行中用分隔符分隔单词时,标准方法是使用
getline
将每一行分隔成
string
,然后使用
getline
从该行创建
stringstream
,将每个单词读入
string
>使用指定的分隔符

为什么用
getline
读一行,用
getline
读一行
stringstream

回答:线路控制

虽然您可以使用
getline
和分隔每个单词的分隔符直接读取文件,但您如何知道一行何时结束,下一行何时开始?当您指定要与
getline
一起使用的分隔符时,
getline
将一直读取,直到找到分隔符或输入结束或
str。已读取最大大小
字符。请参阅。因此,在本例中,
'\n'
结尾的行没有特殊意义

但是,如果您将整行读入一个
string
,然后从该行创建一个
stringstream
,您知道您只能读取到行尾,因为这将触发输入时的文件结束条件。因此,即使您使用带分隔符的
getline
,它现在也只能读取到行尾

使用此方法并使用数据文件的一个简短示例将演示如何