请教一个字符串的位置的问题?

xyc6838 2002-09-19 01:25:19
while((pos=textline.find_first_of(' ',pos))!=std::string::npos)
在这个循环中,是一直找一行(textline)字符串的空格字符位置,当找完一行字符串最后一个空格完后,应该找不到了,这时候 pos的位置在哪呢

比如下二句话:
what your name
my name is xyc
第一行行完后,应该在哪个位置啊?

如下语句:
int pods=0 ,prev_pos=0;
while((pos=textline.find_first_of(' ',pos))!=std::string::npos)
{
。。。。
pos++;
prev_pos=pos;
}
int temp=pos-prev_pos
。。。

// 发现temp的值为-69,
不知从何解释,我的程序中的本意是应该为4的,各位有何高招啊,请说得详细一点,这是一个C++primer中的一个范例的一部份,不得其解?
...全文
48 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liubear 2002-09-22
  • 打赏
  • 举报
回复
不好意思,我没明白你的意思。
xyc6838 2002-09-20
  • 打赏
  • 举报
回复
to linebear:
你说的不错,打出来的是一样的字,可是:不知你不有没有用compare这个命令时,他们却是不一样的。在C++primer中的这一段程序是进行单词的归类,可是上面提到的两个name是不一样的
liubear 2002-09-20
  • 打赏
  • 举报
回复
上面有句话,少写了几个字,应改为:
意思就是把textline中最后一个单词push到类型为vector<string>的变量 word中.
liubear 2002-09-20
  • 打赏
  • 举报
回复
书中代码并没有错,也不需要你加的那条语句来再定位pos
其实pos返回为-1,是没错。但从另一方面讲,pos=0xffffffff.即一个很大的数。所以这句代码
words->push_back(textline.substr(prev_pos,pos-prev_pos));
意思就是把textline中最后一个单词vector word中.
你可以试着把这句代码改为

string textword;
textword = textline.substr(prev_pos,pos-prev_pos));
或者跟踪,或者用cout << textword << endl;
来看,结果确实是一行中最后一个单词。
xyc6838 2002-09-19
  • 打赏
  • 举报
回复
谢谢各位的讨论,我把程序改为如下:

for(short line_pos=0; line_pos<lines_of_text->size();++line_pos)
{
short word_pos=0;
string textline=(*lines_of_text)[line_pos];
string::size_type pos=0,prev_pos=0;
while((pos=textline.find_first_of(' ',pos))!=std::string::npos)
{

words->push_back(textline.substr(prev_pos,pos-prev_pos));
locations->push_back(make_pair(line_pos,word_pos));
word_pos++;
pos++;
prev_pos=pos;
}
pos=textline.find('\n'); //这一句在C++Primer第三版中是没有的
words->push_back(textline.substr(prev_pos,pos-prev_pos));
locations->push_back(make_pair(line_pos,word_pos));
}
text_locations= new text_loc(words,locations);
}

在C++primer第三版的P234中有这一段语句,难道是书中错了,请大家讨论!
难道是它的本意就是让两个name为不一样吗?


这是要读取的line_of_text中的两句话:
what your name
my name is xyc
jyc_nj 2002-09-19
  • 打赏
  • 举报
回复
string textline="what is your name\n my name is jyc";
int pos=0 ,prev_pos=0;
while((pos=textline.find_first_of(" \n",pos))!=std::string::npos)
{
if( textline[pos] == '\n' )
{
break;
}
else{
pos++;
prev_pos=pos;
}
}

if( pos != std::string::npos )
int temp=pos-prev_pos ; //
liubear 2002-09-19
  • 打赏
  • 举报
回复
为-69是因为,你上次找到空格的位置为67,
则经过
pos++;
prev_pos=pos;
后,prev_pos为68
跳出while循环时,pos=-1, 所以
int temp=pos-prev_pos;
temp就为-69
liubear 2002-09-19
  • 打赏
  • 举报
回复
也就是-1
liubear 2002-09-19
  • 打赏
  • 举报
回复
pos的位置在std::string::npos
tiger28 2002-09-19
  • 打赏
  • 举报
回复
"在这个循环中,是一直找一行(textline)字符串的空格字符位置,当找完一行字符串最后一个空格完后,应该找不到了,这时候 pos的位置在哪呢"
-1; finishing the search of string

How did you get -69? If you still have problem, please paste your source code here.

hope it helps.

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧