二元单项式输入和输出(格式化输入函数sscanf运用)

从标准输入流中读取若干个数量未知的二元单项式,直到碰上 \n 为止。
二元单项式格式如下:
kx^my^n
其中 k 是系数,m 是变量 x 的幂指数,n 是变量 y 的幂指数。
函数接口定义:

函数 ParseTerm - 从字符串中,读取一个二元单项式
int ParseTerm( char *s, Term *t );
参数:
s - 字符串指针
t - 单项式指针,用于保存读取结果
返回值:
成功 - 读取数据所使用的字符数
不成功 - 0
要求:

按照上面的函数接口定义和说明,编写函数 ParseTerm 的代码。



#include 

#define MAXLINE 1024

// 二元单项式
typedef struct {
    int k;    // 系数
    int nx;   // x 的指数
    int ny;   // y 的指数
} Term;

int ParseTerm( char *s, Term *t ); 

char * parse( char *s, Term *t )
{
    int n = ParseTerm(s,t);
    return ( n > 0 ? s + n : NULL );
}

int main()
{
    char linebuffer[MAXLINE];
    char *p = linebuffer;
    Term data;

    p = fgets(linebuffer, sizeof(linebuffer), stdin);
    while( p && (p = parse(p, &data)) ) 
    {
        printf("%dx^%dy^%d\n", data.k, data.nx, data.ny);
    }
    return 0;
}

/* 你的代码将被嵌在这里 */
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

int ParseTerm( char *s, Term *t )
{
    int i = 0;

    // 读取系数 k
    sscanf(s, "%d", &(t->k));
    while( s[i] != '\0' && s[i] != 'x' )
    {
        i++;
    }

    // 判断是否到达字符串末尾或者没有找到 ‘x’
    if( s[i] != 'x' || s[i+1] != '^' )
    {
        return 0;
    }

    // 读取指数 m
    sscanf(&s[i+2], "%d", &(t->nx));
    i += 3;
    while( s[i] != '\0' && s[i] != 'y' )
    {
        i++;
    }

    // 判断是否到达字符串末尾或者没有找到 ‘y’
    if( s[i] != 'y' || s[i+1] != '^' )
    {
        return 0;
    }

    // 读取指数 n
    sscanf(&s[i+2], "%d", &(t->ny));

    return i+3;
}