在C++中,在如下文件如何把数字读出来?
// 说明:以 // 开始的行为注释
// 以下文字中 ?? 代表实际的数字
// 宿舍楼的初始层数
FLOOR: 10
// 每层的初始房间数
ROOM: 20
// 每间房的初始容量(即入住人数)
CAPACITY: 8
// 每单位重量食物可以增加的体重
FOOD_WEIGHT: 3
// 每单位重量食物的价格
FOOD_COST: 100
// 每单位时间学习减少的体重
STUDY_WEIGHT: 1
// 每单位时间学习增加的魅力
STUDY_CHARM: 2
// 每单位时间化妆可以增加的容貌
MAKEUP_LOOKS: 1
// 每单位时间化妆消耗的金钱
MAKEUP_COST: 200
// 每单位时间运动可以增加的健康
EXERCISE_HEALTH: 2
// 每单位时间运动减少的体重
EXERCISE_WEIGHT: 1 展开
/***
数据提取
***/
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
system("color 1e");
string goal,text[200];
int i(0),i1(0),i3(1),i4(-1);
double i2[200];
cout<<"请将要提取数字的文件拖到此处:"<<endl;
cin>>goal;
ifstream f(goal.c_str());
text[0]="不为空";
while(!text[i].empty())
{
i++;
f>>text[i];
}
f.close();
/***根据你数据文件特点这段代码足以完成***///代码段1
for(int j=1;j<i;j++)
{
for(int r=0;r<text[j].length();r++)
if(text[j][r]>='0'&&text[j][r]<='9')
{
i2[i1]=atoi(text[j].substr(r,text[j].length()-r).c_str());
i1++;
break;
}
}
/*该段更具普适性代码段2
for(int j=1;j<i;j++)
{
for(int r=0;r<text[j].length();r++)
{
if(text[j][r]>='0'&&text[j][r]<='9'||text[j][r]=='.')
{
if(i4==-1)
i4=r;
if((text[j][r]>='0'&&text[j][r]<='9'||text[j][r+1]=='.')&&r==text[j].length()-1)
{
i2[i1]=atof(text[j].substr(i4,i3).c_str());
i3=1;
i1++;
i4=-1;
continue;
}
if(text[j][r+1]>='0'&&text[j][r+1]<='9'||text[j][r+1]=='.')
i3++;
}
else if(i4!=-1)
{
i2[i1]=atof(text[j].substr(i4,i3).c_str());
i3=1;
i1++;
i4=-1;
}
}
}
自己调试*************/
cout<<"从文件中提取出来的数据为:"<<endl;
for(int j1=0;j1<i1;j1++)
cout<<i2[j1]<<endl;
return 0;
}
/***对于你所给数据文件的特点其实代码段1可以很好解决,程序中注释掉的代码段2为普通情况下的方法,可以直接替换代码段1且更具普适性,功能更强大***/