题目要求:
txt文本中的内容格式如下:
!name1
number=4
point=1 2 3 4 5 6 7 8
获取点的个数和值
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
typedef struct _point POINT;
typedef struct _point* HPOINT;
struct _point
{
int x;
int y;
};
bool GetFileContent(const string strFilePath, vector<string> &vsContent)
{
bool bRet = false;
if (!strFilePath.empty())
{
fstream file;
char szLine[256] = {0};
file.open(strFilePath.c_str(), fstream::in);
if (file.is_open())
{
while (file.getline(szLine, 256))
{
if (szLine[0] != '!')
{
vsContent.push_back(szLine);
}
memset(szLine, 0, sizeof(szLine));
}
bRet = true;
}
}
return bRet;
}
bool GetStrFromContent(vector<string> &vsContent, const string strSrc, string &strDest)
{
bool bRet = false;
vector<string>::iterator iter;
string strLeft, strRight;
int nPos;
for (iter=vsContent.begin(); iter!=vsContent.end(); ++iter)
{
nPos = (*iter).find("=");
if (-1 != nPos)
{
strLeft = (*iter).substr(0, nPos);
strRight = (*iter).substr(nPos+1);
if (-1 != strLeft.find(strSrc))
{
strDest = strRight;
bRet = true;
}
}
}
return bRet;
}
int main(int argc, char *argv[])
{
vector<string> vsContent;
int number;
HPOINT hpoint = NULL;
string strDest;
if (GetFileContent("1.txt", vsContent) && (vsContent.size()>0))
{
if (GetStrFromContent(vsContent, "number", strDest))
{
number = atoi(strDest.c_str());
hpoint = new POINT[number];
}
if (GetStrFromContent(vsContent, "point", strDest))
{
string strTemp = strDest;
string leftTemp;
string rightTemp;
int count = number*2;
for (int i=0; i<count; i++)
{
int posTemp = strTemp.find(" ");
leftTemp = strTemp.substr(0, posTemp);
rightTemp = strTemp.substr(posTemp+1);
strTemp = rightTemp;
if (0 == i%2)
{
hpoint[i/2].x = atoi(leftTemp.c_str());
cout << "x = " << hpoint[i/2].x << endl;
}
else
{
hpoint[i/2].y = atoi(leftTemp.c_str());
cout << "y = " << hpoint[i/2].y << endl;
}
}
}
}
if (hpoint)
{
delete hpoint;
hpoint = NULL;
}
return 0;
}
上面的代码只是简单的实现了下,并没有考虑什么容错性,所以txt里的内容需严格按照要求来写,
不能随便多个空格或者等号右边不是数字之类的。