C程序设计语言(K&R第二版):练习4-7

题目:

编写一个函数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,自我解答和参考答案是一致的。但是自我解答中并没有考虑把字符串按照逆序进行压回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值