c - 从字符串中读取数字数组

标签 c split scanf c-strings

我有一个字符串,其中包含数百个由空格分隔的 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/

相关文章:

java - 按类别将一个集合拆分为多个集合

string - Lisp - 将输入拆分为单独的字符串

c - fscanf 是否分配内存并在字符串末尾放置一个 NUL 字节?

C - 如何检查是否有用户输入

c - 我如何在 Linux 上获取 cpuid()?

更改 OS X 控制台输出中的颜色

c - 简单检查 C 中 char 数组中的字符

python - 为什么 split() 结果中返回空字符串?

c - scanf() 如何检查输入是整数还是字符?

c - fscanf() fclose() 或读取文件退出并结束程序