c++ - 使用 Tab Space 字符标记 CString 问题

标签 c++ windows string

只要有 "\t"(制表符空格)字符,我就会尝试将 CString 一分为二。这是我正在使用的代码:

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 时会导致断言。

最佳答案

丢失++indx

来自 CStringT::Tokenize 的文档:

The value of iStart is updated to be the position following the ending delimiter character, or -1 if the end of the string was reached.

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

这是对 Tokenize 的简单健全性检查:

CString val;
CString str1, str2, str3;
int indx;

val  = _T("");
indx = 0;
str1 = val.Tokenize(_T("\t"), indx);
assert(str1 == _T("") && indx == -1);

val  = _T("String1");
indx = 0;
str1 = val.Tokenize(_T("\t"), indx);
assert(str1 == _T("String1") && indx >= 0);
str2 = val.Tokenize(_T("\t"), indx);
assert(str2 == _T("") && indx == -1);

val  = _T("String1\tString2");
indx = 0;
str1 = val.Tokenize(_T("\t"), indx);
assert(str1 == _T("String1") && indx >= 0);
str2 = val.Tokenize(_T("\t"), indx);
assert(str2 == _T("String2") && indx >= 0);
str3 = val.Tokenize(_T("\t"), indx);
assert(str3 == _T("") && indx == -1);

你得到不同的结果吗?

关于c++ - 使用 Tab Space 字符标记 CString 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12568920/

相关文章:

android - 从字符串中删除字符串

python - vec4 多个 mat4,然后在 Python 中将其设为 vec3

c++ - 使用类的 'this' 指针的 boost::intrusive_ptr 构造函数歧义

c - 我如何在 C 中测量时间?

windows - 如何确定特定文件是否在 Windows 中打开?

string - 在 bash 脚本中 : how to use printf to print a unique string containing some\n\t

c++ - 将库添加到 MonoDevelop C++ 项目

c++ - 从类型 'const char*&' 的右值初始化类型 'const char *' 的非常量引用无效

windows - 如何以递归方式列出 Windows .bat 文件中类型为 *.mp3 的所有文件?

python - 将任意字符串转换为整数