fuill 2022-12-15 14:31 采纳率: 68.2%
浏览 215
已结题

C++文件读取到链表的问题,怎么改

C++文件读取到链表的问题,怎么改

#include<bits/stdc++.h>
using namespace std;
struct Plant
{
    //植物信息定义
    string name;                                        //植物名称
    string sname;                                        //学名
    string place[100];                                    //分布地
    string detail;                                        //详情描述
};

typedef struct LNode
{
    Plant data;           //结点的数据域
    struct LNode *next; //指针域
} LNode,*LinkList;

void ReadFile(LinkList &L, string filename)
{
    //从文件中读取数据,存入链表L中
    ifstream infile;
    infile.open(filename.c_str());//打开文件
    string line;
    LinkList p=L;
    while(getline(infile,line))
    {
        //读取一行植物数据
        Plant temp;
        stringstream ss(line);
        string s;
        int flag=0;
        while(getline(ss,s,'#'))
        {
            cout<<s<<endl;
            if(flag==0) temp.name=s;
            if(flag==1) temp.sname=s;
            if(flag==2)
            {
                stringstream ssplace(s);
                string place;
                int placenum=0;
                while(getline(ssplace,place,'@'))
                {
                    temp.place[placenum]=place;
                    placenum++;
                }
            }
            if(flag==3) temp.detail=s;
            flag++;
        }
    //    L->data=temp;
    //    L=L->next;
    }
    //L=NULL;
    //L=p;
}

int exam(LinkList L,string name)
{
    //判断该植物名称name是否存在于plant.txt中
    LinkList p=L;
    //InitList(p);
    //p=L;
    //LNode *p=L;
    if(p==NULL) cout<<"链表为NULL"<<endl ;
    else cout<<"链表不为NULL"<<endl ;
    int flag=0;
    while (p!=NULL)
    {
        cout<<p->data.name<<endl;
        
        if (p->data.name == name)
        {
            flag=1;
            return flag;
        }
        p = p->next;
    }
    return flag;
}

bool Insert(LinkList &L, string filename)
{
    //增加植物信息,输入植物的名称、学名、分布地和详情描述信息,将该植物的基本信息添加到plant.txt中的最后
    //如果该植物名称存在于plant.txt中,返回false,否则,返回true
    
    
    
    
}

void InitList(LinkList &L)
{
    //构造一个空的单链表L
    L=new LNode;
    L->next=NULL;
}

void check(string filename)
{
    //读取文件最后一行内容,即新增植物信息
    ifstream infile;
    infile.open(filename.c_str());                            //打开文件
    string line, last_line;
    while (getline(infile, line))
    {
        last_line = line;
    }
    cout << last_line << endl;
    infile.close();
}

int main()
{
    LinkList L;
    string filename1="plant.txt";      //每次从plant.txt中读取数据,不保存之前新增的数据
    string filename2="data_edit/plant.txt";
    InitList(L);
    //读plant.txt文件
    ReadFile(L,filename1);
    
    string Pname="二色补血草";
    if(exam(L,Pname))
    {
        cout<<Pname<<"is in the linked list"<<endl; 
    }
    else
    {
        cout<<Pname<<"is not in the linked list"<<endl; 
    }
    
    //if(Insert(L,filename2))
        //check(filename2);
    //else
        //cout<<"增加失败\n";
    return 0;
}

plant.txt

二色补血草#Limonium bicolor#江苏@辽宁@黑龙江@吉林#多年生草本,高20-50厘米
珊瑚补血草#Limonium coralloides#新疆#多年生草本,高25-50厘米
  • 写回答

1条回答 默认 最新

  • 文子啊啊啊 2022-12-16 13:16
    关注

    你的链表是不是只创建了一个结点?

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月21日
  • 创建了问题 12月15日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值