0
我有一个字符串“我的名字是:贝蒂/ G”。我要提取贝蒂/ 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字符,这意味着最后一个字符串被损坏或发生了奇怪的事情。
我试图捕获上次串(贝蒂/ 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(贝蒂/ G)。此外,我试图删除空白空间,然后检查长度,它仍然是8.字符串中的最后一个字符后没有空格。
任何人都可以请建议可能是什么问题?
如果你使用'std :: istringstream',它会简单得多。 – timrau
之后是否有换行符,以便冒号在最后一行结束? – nneonneo
您可以在分割之前打印原始字符串,只是为了确保? – Deduplicator