题目:
编写一个函数ungets(s), 将整个字符串s压回到输入中。ungets函数需要使用buf和bufp吗?它能否仅用ungetch函数?
自我解答:
ungetch函数实现了把一个字符压回到输入中,所以把字符串s压入到输入中可以选择调用ungetch函数而避开直接操作buf和bufp。
void ungets(char s[])
{
int i;
for(i = 0; s[i] != '\0'; i++)
ungetch(s[i]);
}
参考答案:
/* ungets: push string back onto the input */
void ungets(char s[])
{
int len = strlen(s);
void ungetch(int);
while(len > 0)
ungetch(s[--len]);
}
变量len中保存着字符串s的字符个数(但不包含最末尾的‘\0’字符),这个数值是由库函数strlen(参见教材第31页)确定的。
函数ungets将调用函数ungetch(参见教材第67页)len次,每次都会把字符串s中的一个字符重新压回输入。ungets函数将按逆序把字符串重新压回输入。
ungets函数不需要直接对buf和bufp进行操作,buf、bufp和出错检查将由ungetch处理。
总结:
关于题目中需不需要使用buf和bufp,自我解答和参考答案是一致的。但是自我解答中并没有考虑把字符串按照逆序进行压回。