作者fp60403 (雨萧)
看板EE_DSnP
标题[问题] 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
1F:推 a3785lexx:我个人是把npos理解成string结束的位置... 11/07 18:35
2F:→ a3785lexx:而且myStrGetTok的回传值我记得是你的token的长度?? 11/07 18:36
3F:→ a3785lexx:其实我也不是很确定.... 11/07 18:37
4F:→ a3785lexx:如果我的理解刚刚好是对的话...用长度(n)去比位置(npos) 11/07 18:38
5F:→ a3785lexx:本身是有点诡异的....@@" 11/07 18:38
6F:推 jylcyl:呃,我找资料的结果,事实上npos=-1 11/07 18:39
7F:→ jylcyl:我对myStrGetTok的解读是它会回传command name後面第一个空 11/07 18:42
8F:→ jylcyl:格的index,如果command name後面就没有空格的话就回传npos 11/07 18:44
9F:→ jylcyl:所以如果tok有东西,後面却没有option,它会回传npos 11/07 18:46
10F:推 jylcyl:npos好像不是位置,它是-1 11/07 18:51
12F:→ fp60403:嗯楼上npos在我问之前就查过了所以才会觉得奇怪@@ 11/07 18:53
13F:→ jylcyl:阿我刚才好奇去写了小程式cout npos的值,结果不是-1,囧 11/07 18:54
※ 编辑: fp60403 来自: 140.112.247.78 (11/07 18:55)
14F:推 jylcyl:恩...我的理解是只要没有option就会回传npos,即使tok里面是 11/07 19:03
15F:推 keyboardle:npos是size_t的最大值.所以是int的-1应该是没错 11/07 19:04
16F:→ jylcyl:有字串也一样,所以用npos来判断tok是有问题的 11/07 19:04
17F:推 jylcyl:感谢楼上的讲解,我用static_cast来输出npos真是就是-1了 11/07 19:08