注册 登录
编程论坛 C++ Builder

[求助]在C++中可以从文本文件中读其他类型数据吗

haifengni 发布于 2007-08-09 19:45, 1287 次点击
  文本文件存放的是字符型数据,但请问可不可以通过类型转换将其转换成整型或浮点型输出?如果能的话应该怎么做?最好可以举下例子(编个程序段),谢谢各位了

[此贴子已经被作者于2007-8-9 19:46:27编辑过]


2 回复
#2
热情依然2007-08-11 06:51

如果你是用C++ BUILDER的话

如果你是用C++ BUILDER的话

std::ifstream readline("xxx.txt")
std::string textline;
while(getline(readline,textline,'\n')){
AnsiString convert = textline.c_str();
double _float = covert.ToDouble();
int _float = covert.ToInt();
}

#3
热情依然2007-08-11 06:54

以下这个是我自己编写的

//---------------------------------------------------------------------------
//字符串转浮点
double Atof(const char* buffer)
{
if( Isdigit(buffer) == false ) return 0;
std::string strMoney(buffer);
double fsum = 0.0;
if( buffer[0] == '-')
{
for(std::size_t index = 1; index < strMoney.length(); ++index)
{
if( strMoney[index] != '.'){
fsum = fsum * 10 + (strMoney[index]-48);
}
}
fsum *= -1;
}
else{
for(std::size_t index = 0; index < strMoney.length(); ++index)
{
if( strMoney[index] != '.'){
fsum = fsum * 10 + (strMoney[index]-48);
}
}
}
int nPos = 0;
if( (nPos = strMoney.find_first_of('.')) != std::string::npos)
{
int nCount = strMoney.length()- nPos;
for( int index = 0; index < nCount-1; ++index)
{
fsum *= 0.1;
}
}
return fsum;
}
//-------------------------------------------------------------------------------
// 判断是否数字
bool Isdigit(const char* str)
{
std::string strNum(str);

if( strNum == "" || strNum == " " || strNum[0]== '.'){
return false;
}

int count = 0;
string::iterator it = strNum.begin();
for(; it!= strNum.end(); ++it)
{
if( (*it <'0'&& *it != '.' && *it != '-') || *it > '9'){
return false;
}
else if( *it == '0' && it == strNum.begin() )
{
if(*(++it) != '.'){
return false;
}
--it;
}
else if( *it == '.' )
{
count++;
}
else if( *it == '-' && it != strNum.begin() )
{
return false;
}
}
if( count > 1){
return false;
}
return true;
}

1