c ++ std :: string.find在布尔表达式中返回未执行的结果

时间:2016-11-03 06:29:07

标签: c++ string boolean posix

我试图搜索' ..'在表示POSIX系统上的文件路径的字符串中。我使用std :: string.find(" .."),它似乎找到了正确的索引,但是在布尔表达式中没有正确评估。

例如:

#include <string>
#include <stdio.h>


int main( int argc, char *argv[] ) {
  std::string a = "abcd";

  int apos = a.find( ".." );

  bool test1 = a.find( ".." ) >= 0;
  bool test2 = apos >= 0;

  if ( test1 ) {
    printf( "TEST1 FAILED: %ld >= 0!\n", a.find( ".." ) );
  }
  if ( test2 ) {
    printf( "TEST2 FAILED %d >= 0!\n", apos );
  }
}

输出:

$ g++ test.cpp -o test
$ ./test 
TEST1 FAILED: -1 >= 0!
$ 

为什么a.find( ".." )在布尔表达式中没有评估为-1的任何想法?

2 个答案:

答案 0 :(得分:1)

今天刚问过这个问题。

这是因为find返回npos unsigned int,它是使用-1初始化的,但它的类型是unsigned int,所以它大于0 find

您应该将npos的结果与-1而不是int main() { int n; cin>>n; n=n/100*100+n%100/10+n%10*10; cout<<n; } 进行比较。

答案 1 :(得分:0)

bool test1 = a.find( ".." ) != std::string::npos;

http://www.cplusplus.com/reference/string/string/find/