当我从事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/