C++ Can';t检查字符"-&引用;串

C++ Can';t检查字符"-&引用;串,c++,C++,我想检查这个字符串中是否有一个元素是“-” bool End(字符工作[]) { int stop=strlen(工作); for(int i=0;i

我想检查这个字符串中是否有一个元素是“-”

bool End(字符工作[])
{
int stop=strlen(工作);
for(int i=0;i
“-”
是一个c字符串,而您需要的是一个字符

改用
'-'

您可以将函数重写为

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

如果要比较单个
字符
,则需要使用
'-'
文本,而不是
“-”

另外,我建议使用
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 == '-'; });
}

代码中有两个错误

1.如前所述,
“-”
是一个
cstring
,但
work[i]
返回一个字符,因此您可能希望将其与字符进行比较。因此,
“-”
应替换为
“-”

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

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

删除
else{return false;}
部分,并更改最后一个
return true
to
返回false使用和它的
查找
成员或至少。
#include <string>

bool End(std::string const& work)
{
    return work.find('-') != std::string::npos;
}
for( ... ){
    if(work[i]=='-'){
        return true;            
    }
}
return false;