作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [问题] string::npos
时间Sat Nov 7 19:27:37 2009
澄清一下:
1. myStrGetTok() 的回传值就是 找到 token 之後
下一个字元 (defined by "delimiter") 的 index.
2. 如果找不到想要的 token, 就回传 string::npos.
你可以将 string::npos 想成 string end or illegal position.
3. 你不应该使用 string::npos 的值, 即使印出来的值是 -1.
但是你可以比较 myStrGetTok() 的回传值 是否为 string::npos
以判断是否有找到 token
4. 最重要的是:
其实有 CmdExec::lexSingleOption() 以及 CmdExec::lexOptions()
可以用来 parse command options. 请多加利用.
※ 引述《fp60403 (雨萧)》之铭言:
: 标题: [问题] string::npos
: 时间: Sat Nov 7 18:16:30 2009
:
:
: 想问一下string::npos到底是怎麽看它的@@
:
: 像在parserCmd中我大概这样用:
:
: string cmd;
: CmdExec* e = 0;
: size_t n = myStrGetTok(str,cmd);
: if (n == string::npos) return 0;
: else
: {...後续的东西}
:
: 然後就变得很奇怪,当输入只有cmd不加option的时候
: 例如:
: mcalc> gg
: <- 直接跳走
: mcalc>
:
: 用ddd看的时候发现它没有进後面的else.
: 可是按照有抓到token的情况不是会回传end吗@@?
: 还是我理解有错误?
:
: 还请不吝解惑QQ
:
: 恩改判断cmd的状况就可以解决。
:
: 这是里面myStrGetTok的其中一个回传(另一个是传token的长度)
:
: if (begin == string::npos) { tok = ""; return begin; }
:
: 所以还是想问一下,为什麽拿size_t n接到的东西用string::npos来判断会有问题?
: 那如果说是最後有拿到token的时候,
: 回传的n是token长度(也就是myStrGetTok里的end),
: 它不是应该不会和string::npos相等吗?
:
:
:
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.112.247.78
: 推 a3785lexx:我个人是把npos理解成string结束的位置... 11/07 18:35
: → a3785lexx:而且myStrGetTok的回传值我记得是你的token的长度?? 11/07 18:36
: → a3785lexx:其实我也不是很确定.... 11/07 18:37
: → a3785lexx:如果我的理解刚刚好是对的话...用长度(n)去比位置(npos) 11/07 18:38
: → a3785lexx:本身是有点诡异的....@@" 11/07 18:38
: 推 jylcyl:呃,我找资料的结果,事实上npos=-1 11/07 18:39
: → jylcyl:我对myStrGetTok的解读是它会回传command name後面第一个空 11/07 18:42
: → jylcyl:格的index,如果command name後面就没有空格的话就回传npos 11/07 18:44
: → jylcyl:所以如果tok有东西,後面却没有option,它会回传npos 11/07 18:46
: 推 jylcyl:npos好像不是位置,它是-1 11/07 18:51
: → jylcyl:http://www.cppreference.com/wiki/string/npos 11/07 18:51
: → fp60403:嗯楼上npos在我问之前就查过了所以才会觉得奇怪@@ 11/07 18:53
: → jylcyl:阿我刚才好奇去写了小程式cout npos的值,结果不是-1,囧 11/07 18:54
: ※ 编辑: fp60403 来自: 140.112.247.78 (11/07 18:55)
: 推 jylcyl:恩...我的理解是只要没有option就会回传npos,即使tok里面是 11/07 19:03
: 推 keyboardle:npos是size_t的最大值.所以是int的-1应该是没错 11/07 19:04
: → jylcyl:有字串也一样,所以用npos来判断tok是有问题的 11/07 19:04
: 推 jylcyl:感谢楼上的讲解,我用static_cast来输出npos真是就是-1了 11/07 19:08
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.41.216
1F:推 INsoarDEEP:所以是string::npos只能用来判断,不能当作值来使用? 11/07 19:53
2F:推 fp60403:谢谢教授和上一篇的同学们! 11/07 19:54
3F:→ fp60403:不过第四点来说 lex看起来是给option用的吧0...0 11/07 19:55
4F:→ fp60403:他的error的部份都是"xxx options!" 11/07 19:55
5F:→ ric2k1:yes, they are for command options 11/07 20:38