我有一个字符串,其中包含数百个由空格分隔的 double 值,我需要将它们读入一个数组。
显然,使用 sscanf("%lf %lf .... ",array[0], array[1],...)
不是明智的选择。我可以将此字符串保存到文件中并使用 fscanf
,因为从文件读取时“头部”会向前移动。我想知道是否有其他方法可以做到这一点。
最佳答案
您可以使用例如以下方法。
#include <stdio.h>
int main( void )
{
const char *s = " 123.321 456.654 789.987";
enum { N = 10 };
double a[N] = { 0.0 };
int pos = 0;
size_t n = 0;
while ( n < N && sscanf( s += pos, "%lf%n", a + n, &pos ) == 1 ) n++;
for ( size_t i = 0; i < n; i++ ) printf( "%.3f ", a[i] );
putchar( '\n' );
}
程序输出为
123.321 456.654 789.987
或者如果你需要在变量s
中保留字符串的原始地址,你可以引入一个类型为const char *
的中间指针。
例如
#include <stdio.h>
int main( void )
{
const char *s = " 123.321 456.654 789.987";
enum { N = 10 };
double a[N] = { 0.0 };
int pos = 0;
size_t n = 0;
const char *p = s;
while ( n < N && sscanf( p += pos, "%lf%n", a + n, &pos ) == 1 ) n++;
for ( size_t i = 0; i < n; i++ ) printf( "%.3f ", a[i] );
putchar( '\n' );
}
关于c - 从字符串中读取数字数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57186177/