• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

求助:文件中字符串转数字

wangtao641 2004-12-01 02:26:48
用vc写程序,读取一个文本文件,该文本文件内容如下: 400.13 25.49
402.16 24.68
404.20 24.38
406.23 24.11
408.26 23.59
410.29 22.72
412.32 22.57
414.34 22.11
416.37 21.93
418.39 21.64
420.41 21.20
422.42 21.08
424.44 21.15
426.45 20.98
428.46 20.96
430.47 21.05
总共740行。我将这些字符读取到字符数组后,将‘.’删掉,相当于将各数字乘100,然后希望将得到的字符串数组中各字符数字,分别转成long型数字,以备计算处理用。小弟试了几次都没成功,哪位大哥能指点一下,最好是有代码。这几天太郁闷了,请大家帮忙啊。
我用void CharToNumber(char*image,char **data,long *number)
{
///将符号'.'删除掉
for(int ii=0;ii<=strlen(image);ii++)
{
if(image[ii]=='.')
image[ii]=image[ii+1];
}
int count=0; //非空格个数
char *tempt; //暂时存空格分开的数字字符串
int k=0,t=0;
for(int i=0,j=0;i<=strlen(image);i++)
{
if(image[i]==' '&&image[i+1]!=' ')
{
do
{
count++;
tempt[t]=image[i+1];
t++;
i++;
}while(image[i]==' '||image[i]=='\n');

}
strncpy(data[k][8],tempt,count);
count=0;
k++;
t=0;
}
for( int r=0;r<=k;r++)
number[r]=atol(data[r][8]);
}
编译后两处错误: error C2664: 'strncpy' : cannot convert parameter 1 from 'char' to 'char *'
error C2664: 'atol' : cannot convert parameter 1 from 'char' to 'const char *'
头文件我都包括了。实在没办法了。 哪位有代码最好了。先谢了


...全文
508 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wangtao641 2005-06-08
很抱歉各位朋友,好久没来这里了,今晚突然想到来这里看看,不想竟有一个帖子没揭题呢。很抱歉。有些迟到了,很抱歉。感谢各位朋友的热心帮助。
回复
Mr-Chen 2004-12-07
字符串转数字的方法:

CString m_str;
float m_temp;
long m_data;
m_str = "402.16";
sscanf(m_str,"%f",&m_temp);
m_temp *= 100;
m_data = (long)m_temp;
回复
Mr-Chen 2004-12-07
你可以使用序列化输出

//对文件进行写操作
int **strTemp;
CFile mFile;
mFile.Open(“d:\\dd\\try.TRY”,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
CArchive ar(&mFile,CArchive::store);
ar<<**strTemp;
ar.Close();
mFile.Close();
回复
wangtao641 2004-12-07
handwolf(初学者),高手你好,如何将**data数字数组及数字运算结果,保存到文件中。字符与数字转来转去,肯定有窍门的,还望你指点阿。谢谢了。
回复
oyljerry 2004-12-07
一次读一行ReadString,然后字符可以用atof直接转换为float
回复
smallcrocodile 2004-12-07
不要一个一个字符的读,你的数字都是等宽的,一次读全一个数据就是了
atof()可以转化为数字,然后×100;
不过你的方法本身没有问题
回复
handwolf 2004-12-07
////////////////////////////////////////////////////
float data[740][2];

//...
//put datas into data
//...

//save the data to file
CStdioFile file;
file.Open("E:\\txt.txt",CFile::modeCreate|CFile::modeWrite);
char strLine[128];
for(i=0;i<740;i++)
{
sprintf(strLine,"%.2f %.2f\n",data[i][0],data[i][1]);
file.WriteString(strLine);
}
file.Close();
////////////////////////////////////////////////////
回复
handwolf 2004-12-07
下面的程序段可以实现你要的结果,文件名是E:\txt.txt
数据由data转入文件中!
////////////////////////////////////////////////////
float data[740][2];

//...
//put datas into data
//...

//save the data to file
CStdioFile file;
BOOL bOpen = file.Open("E:\\txt.txt",CFile::modeCreate|CFile::modeWrite);
char strLine[128];
float f1,f2;
for(i=0;i<740;i++)
{
sprintf(strLine,"%.2f %.2f\n",data[i][0],data[i][1]);
file.WriteString(strLine);
}
file.Close();
////////////////////////////////////////////////////
回复
EnochShen 2004-12-07
atoi
回复
handwolf 2004-12-01
下面的程序段可以实现你要的结果,文件是E:\txt.txt
结果储存在data中!
////////////////////////////////////////////////////
CStdioFile file;
BOOL bOpen = file.Open("E:\\txt.txt",CFile::modeRead);
float data[740][2];
CString strLine;
float f1,f2;
int index =0 ;
while(file.ReadString(strLine) && index < 740)
{
sscanf(strLine,"%f%f",&f1,&f2);
data[index][0] = f1*100;
data[index][1] = f2*100;
++index;
}
file.Close();
////////////////////////////////////////////////////
回复
chuanke 2004-12-01
路过
回复
arvid_gs 2004-12-01
data是二维数组,data[k]表示地址strncpy需要地址为参数!
回复
arvid_gs 2004-12-01
strncpy(data[k],tempt,count);

number[r]=atol(data[r]);
回复
qiqiyeye 2004-12-01
用atoi或者atof
见MSDN上的例子

/* ATOF.C: This program shows how numbers stored
* as strings can be converted to numeric values
* using the atof, atoi, and atol functions.
*/

#include <stdlib.h>
#include <stdio.h>

void main( void )
{
char *s; double x; int i; long l;

s = " -2309.12E-15"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );

s = "7.8912654773d210"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );

s = " -9885 pigs"; /* Test of atoi */
i = atoi( s );
printf( "atoi test: ASCII string: %s\t\tinteger: %d\n", s, i );

s = "98854 dollars"; /* Test of atol */
l = atol( s );
printf( "atol test: ASCII string: %s\t\tlong: %ld\n", s, l );
}


Output

atof test: ASCII string: -2309.12E-15 float: -2.309120e-012
atof test: ASCII string: 7.8912654773d210 float: 7.891265e+210
atoi test: ASCII string: -9885 pigs integer: -9885
atol test: ASCII string: 98854 dollars long: 98854



回复
lixiaosan 2004-12-01
atol
回复
hongzm 2004-12-01
strncpy(data[k][8],tempt,count);
第一个参数是字符型的啊!~~?
你试试
tmpstr=""
strncpy(tmpstr+data[k][8],....
行不行啊?
回复
camelyi 2004-12-01
fscanf(pFile, "%f %f", &d1, &d2);
回复
camelyi 2004-12-01
用fscanf
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-12-01 02:26
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……