使用空格拆分字符串会导致字符串损坏

时间:2014-04-07 15:54:28

标签: c++

我有一个字符串“我的名字是:Betty / G”。我必须从这个字符串中提取Betty / G,我已经编写了以下代码:

std::string str; //"My name is: Betty/G"
char sep = ' ';
std::vector<std::string> token;
for(size_t p=0, q=0; p!=str.npos; p=q)
{
    std::string final = str.substr(p+(p!=0), (q=str.find(sep, p+1))-p-(p!=0));
    token.push_back(final);
}

for(std::vector<std::string>::const_iterator z = token.begin();z!=token.end();++z) 
    std::cout<<":"<<*z<<":"<<std::endl;

当我单独打印字符串时,我得到以下输出:

:My: 

:name:

:is::

:Betty/G

G字符后面没有“:”表示最后一个字符串被破坏或者发生了一些奇怪的事情。

我正在尝试捕获最后一个字符串(Betty / G),如下所示:

int count = token.size();
int len,n;
n=count;
char slsName[30];
len = token[--n].size();
strcpy(slsName,token[--count].c_str());
slsName[len]='\0';
printf("length is %d\n",len);

但是它打印的字符串的长度是8,而它应该是7(Betty / G)。此外,我试图删除空格,然后检查长度,它仍然是8.字符串中的最后一个字符后面没有空格。

有人可以建议可能出现的问题吗?

1 个答案:

答案 0 :(得分:1)

代码在MSVC 2013上正常运行。 你最好使用Boost Tokenizer。