
c++怎么按空格按行读取txt到结构数组
现有一个结构structstudent{charstunum[20];charname[20];intgra_chn;intgra_eng;intgra_math;int...
现有一个结构
struct student
{
char stunum[20];
char name[20];
int gra_chn;
int gra_eng;
int gra_math;
int gra_phy;
int gra_chem;
double gra_ave;
};
一个类
class _class
{
student stu[200];
int count;
public:
……
};
怎么从txt文件中读取数据存放到stu数组里面去 文件格式为:
张三 1234567 99 98 97 96 95 97
李四 2345678 98 97 96 95 94 96
……
严格空格严格换行 急急急求解!!!求代码!!! 展开
struct student
{
char stunum[20];
char name[20];
int gra_chn;
int gra_eng;
int gra_math;
int gra_phy;
int gra_chem;
double gra_ave;
};
一个类
class _class
{
student stu[200];
int count;
public:
……
};
怎么从txt文件中读取数据存放到stu数组里面去 文件格式为:
张三 1234567 99 98 97 96 95 97
李四 2345678 98 97 96 95 94 96
……
严格空格严格换行 急急急求解!!!求代码!!! 展开
5个回答
展开全部
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
struct student
{
char stunum[20];
char name[20];
int gra_chn;
int gra_eng;
int gra_math;
int gra_phy;
int gra_chem;
double gra_ave;
};
istream& operator>>(istream& is,student& stu)
{
is>>stu.name >>stu.stunum>>stu.gra_chn>>stu.gra_eng>>stu.gra_math
>>stu.gra_phy>>stu.gra_chem>>stu.gra_ave;
return is;
}
ostream& operator<<(ostream& os,const student& stu)
{
os<<stu.name<<" "<<stu.stunum<<" "<<stu.gra_chn<<" "<<stu.gra_eng<<" "
<<stu.gra_math<<" "<<stu.gra_phy<<" "<<stu.gra_chem<<" "<<stu.gra_ave<<" ";
return os;
}
class _class
{
student stu[200];
int count;
public:
void load(const string& file)
{
ifstream fin(file.c_str());
if(!fin){
cerr<<"can not open "<<file<<endl;
return;
}
string line;
for(int i=count=0; i<200 && getline(fin,line); i++){
istringstream iss(line);
if(iss>>stu[i])count++;
}
}
void show()
{
for(int i=0;i<count;i++)cout<<stu[i]<<endl;
}
};
int main()
{
_class a;
a.load("a.txt");
a.show();
return 0;
}
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
struct student
{
char stunum[20];
char name[20];
int gra_chn;
int gra_eng;
int gra_math;
int gra_phy;
int gra_chem;
double gra_ave;
};
istream& operator>>(istream& is,student& stu)
{
is>>stu.name >>stu.stunum>>stu.gra_chn>>stu.gra_eng>>stu.gra_math
>>stu.gra_phy>>stu.gra_chem>>stu.gra_ave;
return is;
}
ostream& operator<<(ostream& os,const student& stu)
{
os<<stu.name<<" "<<stu.stunum<<" "<<stu.gra_chn<<" "<<stu.gra_eng<<" "
<<stu.gra_math<<" "<<stu.gra_phy<<" "<<stu.gra_chem<<" "<<stu.gra_ave<<" ";
return os;
}
class _class
{
student stu[200];
int count;
public:
void load(const string& file)
{
ifstream fin(file.c_str());
if(!fin){
cerr<<"can not open "<<file<<endl;
return;
}
string line;
for(int i=count=0; i<200 && getline(fin,line); i++){
istringstream iss(line);
if(iss>>stu[i])count++;
}
}
void show()
{
for(int i=0;i<count;i++)cout<<stu[i]<<endl;
}
};
int main()
{
_class a;
a.load("a.txt");
a.show();
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单的说:在文件里一个字一个字地读取就可以了
关键点是:空格是'\0',回车是“\r\n”:进行判断就可以了,你可以一次读两个字符,
关键点是:空格是'\0',回车是“\r\n”:进行判断就可以了,你可以一次读两个字符,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
刚好,我最近就做了一个以空格来解决问题的
for(i=0;i<n;i++) // n是行数
{
for(j=0;j<=i;j++)
{
while((ch=input.get())!=' '&&ch!='\n')
str+=ch; // string str
if(ch==' '||ch=='\n')
{
array[i][j]= atoi(str.c_str()); //将string 变成int
array[j][i]=array[i][j]; //int array[max][max]
str.clear();
cout<<setw(5)<<array[i][j];
}
}//cout<<"chenggongdi 1111 bu"<<endl;
cout<<endl;
}
我的数据如下:
0
1078 0
119 963 0
263 989 262 0
398 1096 426 171 0
401 1381 504 394 341 0
634 1189 605 867 1025 987 0
866 1451 860 1117 1264 1171 281 0
1061 1679 1068 1318 1457 1325 512 232 0
367 735 271 266 412 650 790 1065 1287 0
905 269 798 769 854 1161 1155 1432 1664 540 0
902 399 806 730 790 1114 1227 1507 1738 537 141 0
1135 160 1025 1010 1095 1403 1314 1582 1813 775 242 328 0
1255 601 1169 1049 1065 1405 1607 1887 2118 899 467 380 447 0
1568 606 1465 1403 1452 1783 1785 2053 2282 1201 668 674 472 441 0
1729 686 1620 1590 1655 1978 1870 2124 2349 1367 827 866 596 687 252 0
626 824 582 376 359 700 1158 1428 1645 374 560 463 787 706 1103 1317 0
1052 685 981 823 816 1157 1484 1765 1993 720 456 319 566 270 705 945 459 0
1343 881 1277 1104 1074 1411 1782 2063 2291 1019 704 584 733 291 666 916 730 299 0
1893 1210 1819 1662 1637 1973 2280 2561 2792 1553 1136 1054 1051 674 697 869 1291 842 563 0
2286 1666 2223 2042 1991 2315 2714 2995 3225 1964 1581 1490 1506 1115 1137 1276 1666 1243 946 455 0
for(i=0;i<n;i++) // n是行数
{
for(j=0;j<=i;j++)
{
while((ch=input.get())!=' '&&ch!='\n')
str+=ch; // string str
if(ch==' '||ch=='\n')
{
array[i][j]= atoi(str.c_str()); //将string 变成int
array[j][i]=array[i][j]; //int array[max][max]
str.clear();
cout<<setw(5)<<array[i][j];
}
}//cout<<"chenggongdi 1111 bu"<<endl;
cout<<endl;
}
我的数据如下:
0
1078 0
119 963 0
263 989 262 0
398 1096 426 171 0
401 1381 504 394 341 0
634 1189 605 867 1025 987 0
866 1451 860 1117 1264 1171 281 0
1061 1679 1068 1318 1457 1325 512 232 0
367 735 271 266 412 650 790 1065 1287 0
905 269 798 769 854 1161 1155 1432 1664 540 0
902 399 806 730 790 1114 1227 1507 1738 537 141 0
1135 160 1025 1010 1095 1403 1314 1582 1813 775 242 328 0
1255 601 1169 1049 1065 1405 1607 1887 2118 899 467 380 447 0
1568 606 1465 1403 1452 1783 1785 2053 2282 1201 668 674 472 441 0
1729 686 1620 1590 1655 1978 1870 2124 2349 1367 827 866 596 687 252 0
626 824 582 376 359 700 1158 1428 1645 374 560 463 787 706 1103 1317 0
1052 685 981 823 816 1157 1484 1765 1993 720 456 319 566 270 705 945 459 0
1343 881 1277 1104 1074 1411 1782 2063 2291 1019 704 584 733 291 666 916 730 299 0
1893 1210 1819 1662 1637 1973 2280 2561 2792 1553 1136 1054 1051 674 697 869 1291 842 563 0
2286 1666 2223 2042 1991 2315 2714 2995 3225 1964 1581 1490 1506 1115 1137 1276 1666 1243 946 455 0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
无难度啊,翻翻string的api吧,另外,字符串写成char[]是c的标准,cpp有string的stl。
http://www.byvoid.com/blog/cpp-string/
http://www.byvoid.com/blog/cpp-string/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以先getline 然后cin就是按照空格分的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询