谷雨186 2022-01-06 11:26 采纳率: 100%
浏览 26
已结题

C++如何使用string型变量连续读取数字串?

如文件中写:123 456 789 李丽
如何读出string型的A:123,B:456,C:789,D:李丽
我的方案:
文件中写:
123
刘丽

化工学院
讲师
120623
123456789
代码:

void staff::getin()    
{    FILE *fp=fopen("./data.txt","r+"); 
    if(!fp){    printf("打开失败!\n");    }
    fscanf(fp,"%s%s%s%s%s%s%s",num,name,sex,department,job_title,begintime,Tel);
    fscanf(fp,"\n");
    fclose(fp); 
}

结果:
工号:123刘丽
姓名:刘丽
性别:女
所属部门:化工学院
职称:讲师
入职时间:120623123456789
联系电话:123456789
如果可以请不要使用int型
涉及源码如下

#include<iostream>
#include<string>
#include<conio.h>
#include<fstream>
using namespace std;
class staff                                                //定义员工类
{    private:
        char num[3];    char name[15];
        char sex[3];    char department[100];
        char job_title[10];    char begintime[6];
        char Tel[13];
    public:                                                //定义成员函数
        void getin(staff *st,int &i);
        void getout();
        void getoutsex(staff *st,int &i);
        void findone(staff *st,int &i);
        void change(staff *st,int &i);
        void delstaff(staff *st,int &i);
        void deleteall(staff *st,int &i,int j);
};
void mainmenuout()                                        //主界面输出
{    cout<<"  ┍┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┑"<<endl;
    cout<<"  ║  欢迎使用员工信息系统  ║"<<endl;
    cout<<"  ├┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┤"<<endl;
    cout<<"  ║  按1输入员工信息       ║"<<endl;
    cout<<"  ║  按2输出员工信息       ║"<<endl;
    cout<<"  ║  按3统计员工信息       ║"<<endl;
    cout<<"  ║  按4查询员工信息       ║"<<endl;
    cout<<"  ║  按5修改指定员工信息   ║"<<endl;
    cout<<"  ║  按6删除指定员工信息   ║"<<endl;
    cout<<"  ║  按7退出系统           ║"<<endl;
    cout<<"  ┕┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┙"<<endl;
}
void staff::getin(staff *st,int &i)                        //输入员工信息
{    FILE *fp=fopen("./data.txt","r+"); 
    
    if(!fp){    printf("打开失败!\n");    }
    fscanf(fp,"%s%s%s%s%s%s%s",st[i].num,st[i].name,st[i].sex,st[i].department,st[i].job_title,st[i].begintime,st[i].Tel);
    fscanf(fp,"\n");
    fclose(fp); 
}
void staff::getout()                                    //输出员工信息
{    cout<<"工号:"<<num<<endl;
    cout<<"姓名:"<<name<<endl;
    cout<<"性别:"<<sex<<endl;
    cout<<"所属部门:"<<department<<endl;
    cout<<"职称:"<<job_title<<endl;
    cout<<"入职时间:"<<begintime<<endl;
    cout<<"联系电话:"<<Tel<<endl<<endl;    
}
void staff::getoutsex(staff *st,int &i)                    //统计员工总数及性别
{    int h,m=0,f=0;
    for(h=0;h<=i;h++)
        if(st[h].sex=="男")    m++;
        else if(st[h].sex=="女")    f++;
    cout<<"男员工有"<<m<<"名"<<endl;
    cout<<"女员工有"<<f<<"名"<<endl;
    cout<<"员工共有"<<f+m<<"名"<<endl;
}
void staff::findone(staff *st,int &i)                    //通过工号,姓名,电话查找员工信息
{    cout<<"输入1按工号查找,输入2按姓名查找,输入3按联系电话查找"<<endl;    //输出信息提示下一步操作
    int x,g;    cin>>x;        char f[100];                
    switch(x)                                            //判断键盘输入信息
    {    case 1:{cout<<"请输入要查找员工的工号";    cin>>f;
                for(g=0;g<=i;g++)
                    if(st[g].num==f)    st[g].getout();
                }break;
        case 2:{cout<<"请输入要查找员工的姓名";    cin>>f;
                for(g=0;g<=i;g++)
                    if(st[g].num==f)    st[g].getout();
                }break;
        case 3:{cout<<"请输入要查找员工的联系电话";    cin>>f;
                for(g=0;g<=i;g++)
                    if(st[g].Tel==f)    st[g].getout();
                }break;
        default:cout<<"输入错误!"<<endl;
        cout<<"信息查询完毕!"<<endl;    getch();
    }
}
void staff::change(staff *st,int &i)                    //利用工号定位员工,修改其信息
{    char f[100];    int k,j;    
    cout<<"请输入要修改员工的工号:";    cin>>f;
    for(k=0;k<=i;k++)
        if(st[k].num==f)    j=k;
    cout<<"按1修改工号,按2修改姓名,按3修改性别,按4修改部门,按5修改职称"<<endl;
    cout<<"按6修改入职时间,按7修改联系电话"<<endl;        //输出信息提示下一步操作
    int x;    cin>>x;                                
    switch(x)                                            //判断键盘输入信息
    {    case 1:cout<<"请输入要修改内容:";    
                cin>>st[j].num;                break;
        case 2:cout<<"请输入要修改内容:";    
                cin>>st[j].name;            break;
        case 3:cout<<"请输入要修改内容:";    
                cin>>st[j].sex;                break;
        case 4:cout<<"请输入要修改内容:";    
                cin>>st[j].department;        break;
        case 5:cout<<"请输入要修改内容:";    
                cin>>st[j].job_title;        break;
        case 6:cout<<"请输入要修改内容:";    
                cin>>st[j].begintime;        break;
        case 7:cout<<"请输入要修改内容:";    
                cin>>st[j].Tel;                break;
        default:cout<<"输入错误!"<<endl;    break;
    }cout<<"信息修改完毕!"<<endl;
}
void staff::deleteall(staff *st,int &i,int j)            //删除某一员工全部信息
{    for(;j<=i;j++)
        st[j]=st[j+1];    i--;
}
void staff::delstaff(staff *st,int &i)                    //利用工号定位员工,删除其信息
{    char f[100];    int k,j;
    cout<<"请输入要删除员工的工号:";    cin>>f;
    for(k=0;k<=i;k++)    if(st[k].num==f)    j=k;
    cout<<"按1删除工号,按2删除姓名,按3删除性别,按4删除部门,按5删除职称"<<endl;
    cout<<"按6删除入职时间,按7删除联系电话,按8删除该员工全部信息"<<endl;
    int x;    cin>>x;
    switch(x)                                            //判断键盘输入信息
    {    case 1:sprintf(st[j].num,"无");            break;
        case 2:sprintf(st[j].name,"无");        break;
        case 3:sprintf(st[j].sex,"无");            break;
        case 4:sprintf(st[j].department,"无");    break;
        case 5:sprintf(st[j].job_title,"无");    break;
        case 6:sprintf(st[j].begintime,"无");    break;
        case 7:sprintf(st[j].Tel,"无");            break;
        case 8:st[j].deleteall(st,i,j);            break;
        default:cout<<"输入错误!"<<endl;break;
    }cout<<"信息删除完毕!"<<endl;
}
int main()                                                //主函数
{    staff st[500];
    system("color 70");    int i=-1,j=0;
    mainmenuout();
    while(1)                                            //永久循环保证系统运行
    {//    system("cls");
        int x; //system("pause");                        //暂停程序解决bug
        cout<<"按1,2,3,4,5,6,7继续操作系统"<<endl;    cin>>x;
        switch(x)                                        //判断键盘输入信息
        {    case 1:i++;st[i].getin(st,i);    break;
            case 2:for(j=0;j<=i;j++)   st[j].getout();    
                cout<<"信息输出完毕"<<endl;    getch(); break;
            case 3:st[0].getoutsex(st,i);    break;
            case 4:st[0].findone(st,i);        break;
            case 5:st[0].change(st,i);        break;
            case 6:st[0].delstaff(st,i);    break;
            case 7:cout<<"退出系统,结束程序!"<<endl;exit(0);    break;
            default:cout<<"输入错误!"<<endl;break;
        }
    }getch();
    return 0;
}
  • 写回答

1条回答 默认 最新

  • CSDN专家-Time 2022-01-06 14:06
    关注

    给你文件中的数据用逗号隔开。或者你自己定义标志读多少位。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月15日
  • 已采纳回答 1月7日
  • 修改了问题 1月6日
  • 创建了问题 1月6日

悬赏问题

  • ¥15 爬取豆瓣电影相关处理
  • ¥15 手机淘宝抓清除消息接口
  • ¥15 C#无selenium
  • ¥15 LD衰减计算的结果过大
  • ¥15 用机器学习方法帮助保险公司预测哪些是欺诈行为
  • ¥15 计算300m以内的LD衰减
  • ¥15 数据爬取,python
  • ¥15 怎么看 cst中一个面的功率分布图,请说明详细步骤。类似下图
  • ¥15 为什么我的pycharm无法用pyqt6的QtWebEngine
  • ¥15 FOR循环语句显示查询超过300S错误怎么办