C语言中,请问如何从字符串中读取所有的浮点数(个数不知道),浮点数以空格隔开
假设有一个字符串str="1.02.03.0...(N个)",有没有什么函数可以读取这些浮点数到一个数组里,并统计浮点数个数。之前看sscanf似乎比较接近,但是它要求格...
假设有一个字符串str="1.0 2.0 3.0...(N个)",有没有什么函数可以读取这些浮点数到一个数组里,并统计浮点数个数。
之前看sscanf似乎比较接近,但是它要求格式控制符中需要确定浮点的个数,似乎不能适应这种个数不定的用法。 展开
之前看sscanf似乎比较接近,但是它要求格式控制符中需要确定浮点的个数,似乎不能适应这种个数不定的用法。 展开
4个回答
2014-03-26
展开全部
如果确认字符串中只有空格分开的浮点数的话,可以利用一个缓存字符串数组, 临时保存当前字符到下一个空格之间的字符, 然后利用atof把它转换为浮点数,然后清空缓存字符串数组,继续读取,直到字符串尾
#include <stdlib.h>
#include <stdio.h>
#define FLOAT_ARRAY_LENGTH 100
#define BUFFER_LENGTH 30
void clear(char buffer[],int len) {
int i = 0;
for (; i < len; i++) {
buffer[i]='\0';
}
}
int main()
{
float f[FLOAT_ARRAY_LENGTH];/*保存识别出的浮点数,数组大小=?*/
int count=0;
char buffer[BUFFER_LENGTH]; /*保存当前字符到下一个空格间的字符*/
char prevChar=' '; /*保存当前字符前一个字符,以处理连续多个空格的情况*/
int j=0;
char *test = " 12345.67 0.1 1.0 .0 ";/*应该输出4个浮点数*/
for(int i=0;test[i]!='\0';i++){
if(test[i]!=' '){
buffer[j]=test[i];
prevChar=test[i];
j++;
} else if(prevChar!=' '){
f[count]=atof(buffer);
++count;
clear(buffer,BUFFER_LENGTH);
prevChar=' ';
j=0;
}/*如果有连续多个空格,则后面的空格无需处理,跳过即可*/
}
for (int i = 0; i < count; i++) {
printf("<%d> %15.3f\n", i, f[i]);
}
return 0;
}
展开全部
用sscanf确实可以实现,代码如下:
#include <stdio.h>
int main()
{
char *str="1.0 2.0 3.0 4.0 50.0" ;
int i ;
double d ;
i=0;
while( *str == ' ' ) str++ ;
while( sscanf( str, "%lf" , &d )==1 )
{
while( *str != ' ' ) str++ ; //跳过已读过的数
i++;
printf( "d:%03d= %lf\n" , i , d );
while( *str == ' ' ) str++ ; //跳过分格符:空格
}
printf( "there is(are) %d float num(s) in str\n" , i );
return 0;
}
当然,你也可以用strtok()函数过获取数据,细节可参看相应的函数介绍
#include <stdio.h>
int main()
{
char *str="1.0 2.0 3.0 4.0 50.0" ;
int i ;
double d ;
i=0;
while( *str == ' ' ) str++ ;
while( sscanf( str, "%lf" , &d )==1 )
{
while( *str != ' ' ) str++ ; //跳过已读过的数
i++;
printf( "d:%03d= %lf\n" , i , d );
while( *str == ' ' ) str++ ; //跳过分格符:空格
}
printf( "there is(are) %d float num(s) in str\n" , i );
return 0;
}
当然,你也可以用strtok()函数过获取数据,细节可参看相应的函数介绍
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//#include "stdafx.h"//vc++6.0加上这一行.
#include <iostream>
#include "iomanip"
using namespace std;
void main(void){
char *str=",1.3 2.1, 3.0 5.0 6.0 7.0 8.0 9.0 ",ch;
int i=0,j=0;
double doub[20];
for(j=i=0;str[i];i++){
if(((ch=str[i])>'9' || ch<'0') && ch!='.') continue;
sscanf(str+i,"%lf",doub+j++);
while((ch=str[i])<='9' && ch>='0' && ch!='\0' || ch=='.') i++;
}
for(i=0;i<j;cout << doub[i++] << ' ');
cout << endl;
}
#include <iostream>
#include "iomanip"
using namespace std;
void main(void){
char *str=",1.3 2.1, 3.0 5.0 6.0 7.0 8.0 9.0 ",ch;
int i=0,j=0;
double doub[20];
for(j=i=0;str[i];i++){
if(((ch=str[i])>'9' || ch<'0') && ch!='.') continue;
sscanf(str+i,"%lf",doub+j++);
while((ch=str[i])<='9' && ch>='0' && ch!='\0' || ch=='.') i++;
}
for(i=0;i<j;cout << doub[i++] << ' ');
cout << endl;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-03-26
展开全部
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void main()
{
int i,j,n=0,len;
float a[50];
char *str="1.2 2.5 100 23.8 63",str1[10];
len=strlen(str);
j=0;
for(i=0;i<len;i++)
{
if(str[i]!=' ')
str1[j++]=str[i];
else
{
str1[j]=0;
if(j>0)
{
a[n++]=atof(str1);
}
j=0;
}
}
if(j>0)
{
str1[j]=0;
a[n++]=atof(str1);
}
for(i=0;i<n;i++)
printf("%g ",a[i]);
}
#include "stdlib.h"
#include "string.h"
void main()
{
int i,j,n=0,len;
float a[50];
char *str="1.2 2.5 100 23.8 63",str1[10];
len=strlen(str);
j=0;
for(i=0;i<len;i++)
{
if(str[i]!=' ')
str1[j++]=str[i];
else
{
str1[j]=0;
if(j>0)
{
a[n++]=atof(str1);
}
j=0;
}
}
if(j>0)
{
str1[j]=0;
a[n++]=atof(str1);
}
for(i=0;i<n;i++)
printf("%g ",a[i]);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询