一个字符串位的位置的问题

xyc6838 2002-09-19 12:39:53
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中的一个范例的一部份,不得其解?
...全文
35 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
xyc6838 2002-09-19
  • 打赏
  • 举报
回复
不好意思,可能我没说清楚,我的目的是找一行字的最后一个字符位置,在C++primer中有的上面的方法,结果提取出来的两个name,它的比较是不一样,我怀疑是第一行完后,name还跟有什么特殊的字符。
what your name
my name is xyc



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;
}
words->push_back(textline.substr(prev_pos,pos-prev_pos));
locations->push_back(make_pair(line_pos,word_pos));

这是一段程序,当我在后续的程序中对name,进行比较时发现它们不一样,但是在显示他们时是一样的字符串
tony808 2002-09-19
  • 打赏
  • 举报
回复
for(i=1;i<str.Length();i++)
{
if(str.SubString(i,1)=="")
{
String tempS = "第"+ IntToStr(i) +"个字符是空格!";
Application->MessageBox(tempS,"提示",MB_OK);
  }
}
你的结果可能是你判断上的错误所致,你仔细看看你的条件。
lifuming 2002-09-19
  • 打赏
  • 举报
回复
可以不用自己编一函数,在CBC里面就有一个函数只要与循环一起使用就可实现:

for(i=1;i<str.Length();i++)
{
if(str.SubString(i,1)=="") ShowMessage("Empty char");
}
gfh21cn 2002-09-19
  • 打赏
  • 举报
回复
learning.....
c2y 2002-09-19
  • 打赏
  • 举报
回复
这个例子我没看过,find_first_of()应是一个自定义函数吧,它的代码是怎么写的?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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