使用Tab Space字符进行Tokenizing String问题

时间:2012-09-24 16:14:38

标签: c++ windows string

每当有CString(标签空间)字符时,我正试图将"\t"拆分为两个。这是我正在使用的代码:

CString val = data->str;
CString valTok;
CString accTok;

int indx = 0;
valTok = val.Tokenize(_T("\t"), indx);
++indx;
accTok = val.Tokenize(_T("\t"), indx);

它的伟大和全部,但accTok的第一个角色遗失了。例如,当val = "String1\tString2"valTok = "String1"accTok ="tring2"时......怎么样?

修改

所以按照hvd的建议我删除了indx增量,我有以下代码:

CString val = ((CItemData*)lpDrawItemStruct->itemData)->str; // Was this value causing the problem in the end
CString valTok;
CString accTok;

int indx = 0;
valTok = val.Tokenize(_T("\t"), indx);
accTok = val.Tokenize(_T("\t"), indx); // ASSERT(iStart >= 0) fails

但是现在第一个Tokenize由于某种原因返回-1 ..!有什么想法吗?

解决:

问题在于传递给val的值:

((CItemData*)lpDrawItemStruct->itemData)->str 

有时为NULL,在某些情况下第二次调用Tokenize时会导致断言。

1 个答案:

答案 0 :(得分:3)

失去++indx

来自CStringT::Tokenize的文档:

  

iStart 的值更新为结束分隔符后面的位置,如果到达字符串末尾,则更新为-1。

第一次调用Tokenize后,indx已经指向'\t'之后,它已经指向“{2}”的“{2}”。通过递增'S',它将指向indx

以下是t的简单完整性检查:

Tokenize

你得到不同的结果吗?