Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CPP:string.find()==0和string.find之间的差异=字符串::npos_C++ - Fatal编程技术网

C++ CPP:string.find()==0和string.find之间的差异=字符串::npos

C++ CPP:string.find()==0和string.find之间的差异=字符串::npos,c++,C++,为什么当我将第一个IF条件更改为cmd.find(“>”)==0时,我的程序无法运行。它仅适用于cmd.find!=非营利组织。 这两个If语句在逻辑上似乎没有区别,因此它实际上没有意义。find()返回找到子字符串的位置 如果子字符串位于位置0(即在确切的开始处 则返回0,这不是失败 npos是一个特殊值,不适用于字符串中的任何有效位置,用于在未找到子字符串时报告失败。字符串是数组,因此0是有效答案。 例如(没有真正的代码): 将返回0,因为该单词位于索引0处 find()如果找到子字符串,则

为什么当我将第一个IF条件更改为cmd.find(“>”)==0时,我的程序无法运行。它仅适用于cmd.find!=非营利组织。 这两个If语句在逻辑上似乎没有区别,因此它实际上没有意义。

find()
返回找到子字符串的位置

如果子字符串位于位置0(即在确切的开始处 则返回0,这不是失败


npos
是一个特殊值,不适用于字符串中的任何有效位置,用于在未找到子字符串时报告失败。

字符串是数组,因此0是有效答案。 例如(没有真正的代码):

将返回0,因为该单词位于索引0处

find()
如果找到子字符串,则返回该子字符串的索引,否则返回
npos
(-1)

cmd.find(“>”==0
仅当在
cmd
的最开始处找到
,例如
“>command here”
而不是
“command>here”
等时才会为真


cmd.find(“>”)=如果在
cmd
中的任何位置都找到了
“>”
,则字符串::npos
将为真。

0是字符串的开头,找到时是一个有效位置。您没有显示
cmd\u行
实际设置为什么。未真正获取它。假设我提供了一个字符串-with-“>”:它正在输入第一种IF语句IF(cmd.find(“>”)=string::npos),但是,以某种奇怪的方式,它无法识别第二种IF语句IF(cmd.find(“>”)=0)您能解释一下原因吗?请注意,假设它不是所提供句子中的第一个字符。@maor36a假设它不是第一个字符,当0(根据定义)是第一个字符的位置时,它的位置怎么可能是0?@maor36a我不确定我是否理解您评论中的问题。输入第一个
if()
(无论出于何种原因)将导致执行第一个return语句。此时,将跳过以下任何语句。第二个
if()
甚至不会被测试;此外,它位于第一个
if()
else
部分。
Command* Function(const char* cmd_line) {

    string cmd = _trim(string(cmd_line));
    if(cmd.find(">") != string::npos)
    {
        return new something(cmd_line);
    }
  else if (cmd.find("pwd") == 0) {
    return new something1(cmd_line);
  }
  else if (cmd.find("chprompt") == 0){
      return new something2(cmd_line);
  }
...
"Hallo World".find("Hallo")