注册 登录
编程论坛 C语言论坛

求大佬帮忙看下这道题怎么写,敲了一上午了都不对

milkya 发布于 2020-05-19 11:48, 1420 次点击
(main函数中)输入一个字符串,包含数字字符和非数字字符,非数字字符中可能有负号、小数点、e格式标志(e或E)、指数部分还将可能有符号,将连续的数字字符作为一个数(该数可能是负数,其中也可能存在一个小数点也可能是指数形式的数;若-或.后无数字,则它们作为分隔符)。首先,写一个函数int count(char *s),算出其中有多少实数(以便在main函数中为这些实数动态开辟恰当的存储空间);其次,写一个函数void store(char *s, double *a),将s中的实数存储到数组a中;最后,在main函数中后输出s中实数的个数、依次输出这些实数(%g格式)并释放a的空间。
2 回复
#2
rjsp2020-05-19 16:53
最简单的办法就是直接 sscanf
#3
rjsp2020-05-19 17:02
程序代码:
#include <stdio.h>
#include <stdlib.h>

size_t count( const char* s )
{
    size_t result = 0;
    for( int i=0,j; sscanf(s+i,"%*lf%n",&j)==0; i+=j )
        ++result;
    return result;
}

void store( const char* s, double* a )
{
    size_t index = 0;
    for( int i=0,j; sscanf(s+i,"%lf%n",&a[index],&j)==1; i+=j )
        ++index;
}

int main( void )
{
    const char* s = "123 12.3 -1.23e-05";

    size_t n = count(s);
    printf( "count = %zu\n", n );

    double* a = malloc( n * sizeof(double) );
    store( s, a );
    for( size_t i=0; i!=n; ++i )
        printf( "%g\n", a[i] );
    free( a );
}
1