user-0 提问: 50分通宵求一段规范的代码读TXT，把X  Y坐标 保存在 合理的数据结构，处理txt文档

回复:
user: user-0
content: 引用 1 楼 yxwsbobo 的回复: #include <fstream> #include <string> #include <iostream> #include <vector> struct Point { 	int x; 	int y; }; int main( void ) { 	std::string fPath; 	std::cin >> fPath; 	std::string skip; 	std::vector<Point> Points;  	std::ifstream fStream{ fPath,std::ifstream::in }; 	while( fStream ) 	{ 		Point temp; 		fStream >> skip; 		if( skip.compare( "X" ) != 0 ) 		{ 			continue; 		} 		fStream >> temp.x; 		fStream >> skip; 		fStream >> temp.y; 		Points.push_back( temp ); 	}  	for( const auto& pt : Points ) 	{ 		std::cout << "x :" << pt.x << "  y :" << pt.y << std::endl; 	} 	return 0; };   孔型: A   注意这里有孔型A ，  但是还有孔型B ,C,D   怎么设计数据结构呢

user: user-0
content: 引用 1 楼 yxwsbobo 的回复: #include <fstream> #include <string> #include <iostream> #include <vector> struct Point { 	int x; 	int y; }; int main( void ) { 	std::string fPath; 	std::cin >> fPath; 	std::string skip; 	std::vector<Point> Points;  	std::ifstream fStream{ fPath,std::ifstream::in }; 	while( fStream ) 	{ 		Point temp; 		fStream >> skip; 		if( skip.compare( "X" ) != 0 ) 		{ 			continue; 		} 		fStream >> temp.x; 		fStream >> skip; 		fStream >> temp.y; 		Points.push_back( temp ); 	}  	for( const auto& pt : Points ) 	{ 		std::cout << "x :" << pt.x << "  y :" << pt.y << std::endl; 	} 	return 0; };  编译不过啊

user: user-1
content: #include <fstream> #include <string> #include <iostream> #include <vector> struct Point { 	int x; 	int y; }; int main( void ) { 	std::string fPath; 	std::cin >> fPath; 	std::string skip; 	std::vector<Point> Points;  	std::ifstream fStream{ fPath,std::ifstream::in }; 	while( fStream ) 	{ 		Point temp; 		fStream >> skip; 		if( skip.compare( "X" ) != 0 ) 		{ 			continue; 		} 		fStream >> temp.x; 		fStream >> skip; 		fStream >> temp.y; 		Points.push_back( temp ); 	}  	for( const auto& pt : Points ) 	{ 		std::cout << "x :" << pt.x << "  y :" << pt.y << std::endl; 	} 	return 0; };

user: user-2
content: 假设孔型名以后有用，用map来存 struct vec2 {      int x,y; } map<string,vector<vec2>> data;

user: user-3
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %32[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-4
content: 1.在读的时候，汉字应该要读到内存中。至于你用不用，那由你之后的业务逻辑决定；  2.建议的数据结构如下：   struct { string name; string type; string value; vector< pair<int, int> >; //如果这里讲究速度，而不考虑顺序，使用map<int, int>更好。

user: user-1
content: 头文件包含了吗

user: user-0
content: 引用 1 楼 yxwsbobo 的回复: #include <fstream> #include <string> #include <iostream> #include <vector> struct Point { 	int x; 	int y; }; int main( void ) { 	std::string fPath; 	std::cin >> fPath; 	std::string skip; 	std::vector<Point> Points;  	std::ifstream fStream{ fPath,std::ifstream::in }; 	while( fStream ) 	{ 		Point temp; 		fStream >> skip; 		if( skip.compare( "X" ) != 0 ) 		{ 			continue; 		} 		fStream >> temp.x; 		fStream >> skip; 		fStream >> temp.y; 		Points.push_back( temp ); 	}  	for( const auto& pt : Points ) 	{ 		std::cout << "x :" << pt.x << "  y :" << pt.y << std::endl; 	} 	return 0; };  tdafx.cpp 1>  1234.cpp 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(23): error C2601: “fStream”: 本地函数定义是非法的 1>          e:\visual studio 2010\projects\1234\1234\1234.cpp(17): 此行有一个“{”没有匹配项 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(23): error C2143: 语法错误 : 缺少“;”(在“}”的前面) 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(24): error C2065: “fStream”: 未声明的标识符 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(27): error C2065: “fStream”: 未声明的标识符 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(27): error C2065: “skip”: 未声明的标识符 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(28): error C2065: “skip”: 未声明的标识符 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(28): error C2228: “.compare”的左边必须有类/结构/联合 1>          类型是“'unknown-type'” 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(32): error C2065: “fStream”: 未声明的标识符 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(33): error C2065: “fStream”: 未声明的标识符 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(33): error C2065: “skip”: 未声明的标识符 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(34): error C2065: “fStream”: 未声明的标识符 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(35): error C2065: “Points”: 未声明的标识符 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(35): error C2228: “.push_back”的左边必须有类/结构/联合 1>          类型是“'unknown-type'” 1>e:\visual studio 2010\projects\1234\1234\1234.cpp(36): fatal error C1903: 无法从以前的错误中恢复；正在停止编译 1> 1>生成失败。 1> 1>已用时间 00:00:00.84 ========== 生成: 成功 0 个，失败 1 个，最新 0 个，跳过 0 个 ==========