当前位置: 代码迷 >> C语言 >> [求助]从一个包含有字母和数字的文本文件读入INT型变量
  详细解决方案

[求助]从一个包含有字母和数字的文本文件读入INT型变量

热度:531   发布时间:2007-10-21 20:51:32.0
[求助]从一个包含有字母和数字的文本文件读入INT型变量
问题:大概意思就是说,有一个文本文件,里面有字母有数字(全是整型而且没有负数),也有可能有有空格等,要求是提出其

中的数字,并且附值给一个变量.



我的做法:先用getc一个一个的把文本文件里面的内容当成字符形式读入并分开把数字附到一个数组里面,但是这样存储

到数组里的是字符形式的数字,然后我再用ASICⅡ代码把字符形式的数组,转化成了INT型的数组,然后在进行附值,但是这

样好象很笨,而且也比较麻烦.而且在把数字和字母分开的时候,我是这样做的,判断读入的字符的ASIC代码,不在数字范围

内的就输出空格,这样的结果是再把此字符型数组转化为INT型时,就得把空格转化为一个负数(比如-1)以区别其他正整数

和0.



请问:有没有更好的方法实现这个功能.
搜索更多相关的解决方案: INT型  数字  变量  文本文件  字母  

----------------解决方案--------------------------------------------------------
sum=0;
for(i=0;i<strlen(str);i++)
{
if(str[i]>='0'&&str[i]<='9')
{
sum=sum*10+str[i]-'0';
}
else
{
if(sum)
{
data[k++]=sum;
sum=0;
}
}
}

----------------解决方案--------------------------------------------------------

这样不行啊,比如文本文件是这样的:abc123def456

要提出的是 x=123 和y=456 按照你那样就变成了 x=123456 了吧


----------------解决方案--------------------------------------------------------


还好我看懂了你的题目.


----------------解决方案--------------------------------------------------------
你的方法行不通吧?
而且我看不懂这个:
if(sum)
{
data[k++]=sum;
sum=0;
}

----------------解决方案--------------------------------------------------------
把数存起来
再重新记数.
----------------解决方案--------------------------------------------------------
哦,我去试试
----------------解决方案--------------------------------------------------------

早就应该先试试再来说了.
等下把结果发上来给我看看吧
----------------解决方案--------------------------------------------------------

这个是我按照你的方法写的:
[CODE]main()
{
int *fpold,*fpnew;
int sum,i,k;
int data[100];
char str[100];
fpold=fopen("old.txt","a+");
fpnew=fopen("new.txt","w+");
sum=0;
k=0;
for(i=0;i<strlen(str);i++)
{
fscanf(fpold,"%c ",&str[i]);
if(str[i]>='0'&&str[i]<='9')
{
sum=sum*10+str[i]-'0';
}
else
{
if(sum)
{
data[k++]=sum;
sum=0;
}
}
}
fprintf(fpnew,"%d ",sum);
fclose(fpold);
fclose(fpnew);
getch();
}[/CODE]

old.txt文本文件内容就只有:abc123def456
但是这个程序运行后new.txt上面只有个0!怎么回事啊


----------------解决方案--------------------------------------------------------
汗一个
自己看看,到底怎么错了.
不过我的也有点小问题
就是最后还要处理一个数
在循环后面加上
if(sum)
{
data[k++]=sum;
sum=0;
}

----------------解决方案--------------------------------------------------------