MyException - 我的异常网
当前位置:我的异常网» C++ » C++从txt中读取数据,该如何解决

C++从txt中读取数据,该如何解决(2)

www.MyException.Cn  网友分享于:2013-02-18  浏览:130次

double SimpleNumberStringToInt(string str);

int _tmain(int argc, _TCHAR* argv[])
{
fn3("D:\\List.txt");
system("pause");
return 0;
}

//function:read data from file
void fn3(string filename)
{
fstream fs(filename,ios::in
------解决方案--------------------
ios::out);
string string_line;
string string_number;
int index;
double number;
if(!fs.bad())
{
while(getline(fs,string_line))
{
cout<<"每行字符串:"<<endl;
cout<<string_line<<endl;
index=string_line.find_last_of(':',string_line.size());
string_number=string_line.substr(index+1);
string_number.assign(string_number.begin() + string_number.find_first_not_of(' '), string_number.begin() + string_number.find_last_not_of(' ') + 1); 
cout<<"最后一个冒号后的字符串(去除空格后):"<<endl;
cout<<string_number<<endl;
number=StringToInt(string_number);
cout<<"转换数字为:"<<endl;
cout<<number<<endl;
string_number="";
}
}
}

double StringToInt(string str)
{
double number;
int e_index,E_index,cout;
cout=str.size();
if(cout==0)
{
return -1;
}
e_index=str.find_first_of('e');
E_index=str.find_first_of('E');
if(e_index!=-1)
{
if(E_index!=-1)
{
//cout<<"cant convert to number"<<endl;
return -1;
}

if(str.find_first_of('e')!=str.find_last_of('e'))
{
//cout<<"cant convert to number"<<endl;
return -1;
}
string str_copy(str);
string left_str=str.erase(e_index,cout-e_index);
string right_str=str_copy.erase(0,e_index+1);
number=SignNumberStringToInt(left_str)*pow(10,SignNumberStringToInt(right_str));
}
else
{
if(E_index!=-1)
{
if(str.find_first_of('E')!=str.find_last_of('E'))
{
//cout<<"cant convert to number"<<endl;
return -1;
}
string str_copy(str);
string left_str=str.erase(E_index,cout-E_index);
string right_str=str_copy.erase(0,E_index+1);
number=SignNumberStringToInt(left_str)*pow(10,SignNumberStringToInt(right_str));
}
else
{
number=SignNumberStringToInt(str);
}
}
return number;
}
double SignNumberStringToInt(string str)
{
switch(str[0])
{
case '+':
str=str.erase(0,1);
return SimpleNumberStringToInt(str);
case '-':
str=str.erase(0,1);
return -SimpleNumberStringToInt(str);
default:
return SimpleNumberStringToInt(str);
}
}
double SimpleNumberStringToInt(string str)
{
int cout=str.size();
int dot_index;
double number=0;
dot_index=str.find_first_of('.');
if(dot_index==-1)
{
for(int i=0;i<cout;i++)
{
if(str[i]<48
------解决方案--------------------
str[i]>57)
{
//cout<<"cant convert to number"<<endl;
return -1;
}
number+=(str[i]-48)*pow(10.0,(double)cout-1.0-i);
}
return number;
}
else
{
for(int i=0;i<dot_index;i++)
{
if(str[i]<48
------解决方案--------------------

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有