从标准输入流中读取若干个数量未知的二元单项式,直到碰上 \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;
}