我想检查这个字符串中的任何一个元素是否为“ - ”?

时间:2016-09-13 11:40:10

标签: c++

我想检查这个字符串中的任何一个元素是否为“ - ”?

  bool End(char work[])
    {
        int stop = strlen(work);
        for(int i = 0;i < stop;i++)
        {
            //c1 = strcmp(work[i],l);
            if(work[i] == "-")
            {
                return true;
            }else{
                return false;
            }
        }
        return true;
    }

3 个答案:

答案 0 :(得分:4)

"-"是一个c字符串,而你期望一个字符。

改为使用'-'

你可以将你的功能重写为

bool End(const char s[])
{
    return std::any_of(s, s + strlen(s), [](char c) { return c == '-'; });
}

答案 1 :(得分:2)

如果您想比较单个char,则需要使用'-'字面值,而不是"-"

顺便提一下,我建议使用std::string代替char[]。这个代码的现代替代品可能是

#include <algorithm>
#include <string>

bool End(std::string const& work)
{
    return std::any_of(begin(work),
                       end(work),
                       [](char c){ return c == '-'; });
}

同样,您可以使用std::string

中的find方法
#include <string>

bool End(std::string const& work)
{
    return work.find('-') != std::string::npos;
}

答案 2 :(得分:2)

代码中有两个错误。

1.如@Jarod42所指出,"-"cstringwork[i]返回一个字符,因此您也希望将其与字符进行比较。因此"-"应替换为'-'

2.编写return语句的方式不正确。这也会导致逻辑错误。在您的情况下,如果您已更正了Jarod42指出的错误,如果字符串的第一个字符不是'-',则该函数返回false,而不管该字符串是否包含字符'-' 。将其更改为:

for( ... ){
    if(work[i]=='-'){
        return true;            
    }
}
return false;