字符串处理 烦
cstring temp = “[THR] THR=143 [Phase1] 档位=1 最大=95 标准时间=3 [Phase2] 档位=4 最大=130 标准时间=8 [Phase3] 档位=5 最大=140 标准时间=16 [Phase4] 档位=2 最大=95 标准时间=3”
我怎么得到 THR 后面的值? 以及挡位 最大后面的各个值?
最近字符串解析我都搞不定,大家帮忙
[解决办法]
字符串固定么?挺复杂的....,是不是要用IsDBCSLeadByte判断?
[解决办法]
有没有明显的分隔?
[解决办法]
如果这个结构固定很好说,无非就是查找,如果不固定就难了。象这样的为什么不用XML?
[解决办法]
用ini文件不是很合适吗?
[解决办法]
Find不行吗?
[解决办法]
CString temp = "[THR] THR=143 [Phase1] 档位=1 最大=95 标准时间=3 [Phase2] 档位=4 最大=130 标准时间=8 [Phase3] 档位=5 最大=140 标准时间=16 [Phase4] 档位=2 最大=95 标准时间=3 ";
int t = temp.Find( "THR= ");
CString s = temp.Mid(t+4, temp.Find( ' ', t)-t-4);
int tt = atoi(s.GetBuffer(0));
挡位 最大后面的各个值?
=========================
类推。
[解决办法]
//每个[THR]代表的整一段结束的地方都加一个 " ",
//也就是[Phase4]里的 "标准时间=3 "后面加一个 " "
//每个 "= "和 " "之间的数据都放在字符串数组中
// "THR=143 "中的143是第一个,档位=1中的1是第二个,最大=95中的95是第3个,依次类推
//每个[THR]中有13个“=”,自己看看再去组织剩下的代码吧
//下面的代码编译通过, strData的值如果有问题,调整下
void query()
{
CString strData =
"[THR] THR=143 [Phase1] 档位=1 最大=95 标准时间=3 [Phase2] 档位=4 最大=130 标准时间=8 [Phase3] 档位=5 最大=140 标准时间=16 [Phase4] 档位=2 最大=95 标准时间=3 ";
CStringArray strDataArr;
CString strSpace = " ";//间隔符
CString strQuery = "= ";//搜索的字符串
int nBeginPos = 0;
do
{
nBeginPos = strData.Find(strQuery, nBeginPos);
if (nBeginPos == -1)
break;
int nEndPos = strData.Find(strSpace, nBeginPos);
if (nEndPos == -1)
nEndPos = strData.GetLength();
CString strValue = strData.Mid(nBeginPos+1, nEndPos-nBeginPos-1);
nBeginPos = nEndPos;
strDataArr.Add(strValue);
}while(nBeginPos > 0);
}
[解决办法]
sscanf is ok.
[解决办法]
实现一个regular expression的解释器~以后所有字符串解析你就不用怕了。。。
[解决办法]
推荐xml
[解决办法]
AfxExtractSubString(CString &rString,LPCTSTR lpszFullString,int iSubString,TCHAR chsep);
rString 得到的字符串
lpszFullString 原来要分割的字符串
iSubString 需要分割的第几段
chsep 按照什么字符来划分
可以按照空格划分,然后寻找“=”,等号后面的就是你要的。