在不使用局部变量的情况下,我如何遍历存储在字符数组中的 c 字符串,以便我可以检查其中是否有字符?

Without using local variables, how could I loop through a c string stored in a character array so that I can check to see if a character is within it?

提问人:ajcheng12 提问时间:9/5/2022 更新时间:9/5/2022 访问量:79

问:

我正在尝试实现一个布尔函数,如果字符 c 在字符数组字符集中,则返回 true。但是,给定的说明指定我不使用局部变量。我假设局部变量包括 for 循环中的变量,例如 int i。下面是我当前使用 for 循环的代码。如果我不使用局部变量,我知道它需要一个 while 循环,但我的问题是 while 循环的条件是什么?

bool isInSet(char c, const char charset[]){
    
    for(int i = 0; i < 80; i++)
    {
        if(c == charset[i])
            return true;
        
    }
    return false;
}
c++ while循环 布尔逻辑

评论

0赞 PaulMcKenzie 9/5/2022
bool isInSet(char c, const char charset[]) { return strchr(charset, c)?true:false; }.请参见 strchr
0赞 sweenish 9/5/2022
@PaulMcKenzie 不应该只是吗?三元是不必要的。return strchr(charset, c);
0赞 PaulMcKenzie 9/5/2022
@sweenish是的,只要回来.现在等待“我们还没有学会......”,否则,我会发布这个作为答案。strchr(charset, c)
0赞 ajcheng12 9/5/2022
@PaulMcKenzie 你是对的,我们还没有学到......,但说明也说没有函数调用。我不知道这是否算数。
0赞 PaulMcKenzie 9/5/2022
@ajcheng12 这些指示还说了什么,以便我们确切地知道什么可以使用,什么不能使用?原来的帖子没有提到任何关于没有使用任何函数的内容。这就是为什么具有所有这些限制的问题需要预先发布所有这些限制的原因。如果您不确定,请回去找您的老师并要求澄清。

答:

0赞 Muhammad Talha Tahir 9/5/2022 #1

你的 char 数组是 const,但是如果你可以删除那个 const,你可以使用这样的东西:

while(*(charset) != '\0'){
    //your logic;
    charset++;
}

评论

0赞 ajcheng12 9/5/2022
想通了,但在删除常量时我会牢记这一点。谢谢。
1赞 Remy Lebeau 9/5/2022
您根本不需要删除 const 即可使用这样的循环。所讨论的常量附加到所指向的内容上,而不是指针本身。
1赞 PaulMcKenzie 9/5/2022 #2

while 循环的条件是什么?

循环可以使用传入指针作为循环条件。while

bool isInSet(char c, const char charset[])
{
    while (*charset)  // loop until we find the terminating null character
    {
        if (*charset == c)
            return true;
        ++charset;  // go to next position
    }
    return false;
}

评论

0赞 ajcheng12 9/5/2022
非常感谢您的帮助。这奏效了,我现在明白我可以在 while 循环中反转逻辑,因此无需为其条件初始化变量。