当我从事CS50 pset3音乐练习时(在下面的练习中对此进行了解释)。我提出一些问题:

is_rest()

在helpers.c中完成is_rest的实现。回想一下,空行代表我们机器可读格式的其余部分。并回想一下,synthesize将调用此函数以确定用户键入的行中的哪一行确实为空。

一行为空白意味着什么?要回答该问题,请先查看cs50.h本身,其中记录了get_string:

https://github.com/cs50/libcs50/blob/develop/src/cs50.h

PS:我检查了链接,但找不到/理解。

如果用户只是按下Enter键,从而仅输入一个“行尾”(即\ n),则get_string上面的注释表示该函数返回什么?

随后将is_rest传递给这样的字符串s时,它(不,您!)应该如何识别?

我的问题是:

为什么您认为该代码无法正常工作?

// Determines whether a string represents a rest
 bool is_rest(string s)
 {

    if (s == "")
    {
        return true;
    }
    return false;
}


但这显然很有效:

bool is_rest(string s)
{
    if(s[0] == '\0')
    {
       return true;
    }
    return false;
}


两种情况下使用的方法之间有什么区别?

另一方面,有人可以向我解释""'\0'之间的区别吗

最佳答案

更新:

正如@Mark Benningfield所指出的,string仅是char *的别名。在这种情况下,您不能直接进行比较,但是需要使用strcmp()函数。

如果指向与s==""相同的地址,则表达式""比较,但是如果s具有相同的内容,例如“”,则表达式不比较。

另一方面,表达式s[0]=='\0'您正在访问字符串s的第一个字符,并测试是否包含\0

因此,第二个表达式是正确的,而第一个则不正确。

关于c - 如何在CS50音乐练习上完成is_rest()函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48937504/

10-12 02:17