字符串处理 烦

xx_jj 2007-03-19 05:41:17
cstring temp = “[THR] THR=143 [Phase1] 档位=1 最大=95 标准时间=3 [Phase2] 档位=4 最大=130 标准时间=8 [Phase3] 档位=5 最大=140 标准时间=16 [Phase4] 档位=2 最大=95 标准时间=3”
我怎么得到 THR 后面的值? 以及挡位 最大后面的各个值?
最近字符串解析我都搞不定,大家帮忙
...全文
428 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
cime63 2007-03-20
  • 打赏
  • 举报
回复
正则如何?
C++不是有正则的库么?
kimryo 2007-03-20
  • 打赏
  • 举报
回复
实现一个regular expression的解释器~以后所有字符串解析你就不用怕了。。。
kimryo 2007-03-20
  • 打赏
  • 举报
回复
我靠,你这这不就是ini格式么。。。
yjgx007 2007-03-20
  • 打赏
  • 举报
回复
sscanf is ok.
UnseenMe 2007-03-20
  • 打赏
  • 举报
回复
其他值同理可得!
UnseenMe 2007-03-20
  • 打赏
  • 举报
回复
如果格式固定,可以利用CStirng的一些方法。
代码如下:

int iStart=0, iEnd=0, value=0;
iStart = 4 + temp.Find("THR=");
iEnd = temp.Find(" ", iStart);

value = atoi(temp.Mid(iStart, iEnd-iStart));//answer
kimryo 2007-03-20
  • 打赏
  • 举报
回复
这种东西用Regular Expression表示最好。。。
yxq123 2007-03-20
  • 打赏
  • 举报
回复
AfxExtractSubString(CString &rString,LPCTSTR lpszFullString,int iSubString,TCHAR chsep);
rString 得到的字符串
lpszFullString 原来要分割的字符串
iSubString 需要分割的第几段
chsep 按照什么字符来划分


可以按照空格划分,然后寻找“=”,等号后面的就是你要的。
kofts 2007-03-20
  • 打赏
  • 举报
回复
最近也是碰到字符串的麻烦,MFC里面/0,/n都有,然后/t和空格键同时做分隔 郁闷啊~~~
Pipi0714 2007-03-20
  • 打赏
  • 举报
回复
推荐xml
xx_jj 2007-03-20
  • 打赏
  • 举报
回复
kimryo(Demon gate has open...)
有杂乱无章的空格 所以ini读取方式不行
suibianshu 2007-03-19
  • 打赏
  • 举报
回复
//每个[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);
}
xlzxlich 2007-03-19
  • 打赏
  • 举报
回复
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));

挡位 最大后面的各个值?
=========================
类推。
ToperRay 2007-03-19
  • 打赏
  • 举报
回复
Find不行吗?
mynamelj 2007-03-19
  • 打赏
  • 举报
回复
用ini文件不是很合适吗?
xx_jj 2007-03-19
  • 打赏
  • 举报
回复
这个结构是固定的
xx_jj 2007-03-19
  • 打赏
  • 举报
回复
字符串不固定 后面的数字是变化的 就是想解析出来
lemon_wei 2007-03-19
  • 打赏
  • 举报
回复
如果这个结构固定很好说,无非就是查找,如果不固定就难了。象这样的为什么不用XML?
DentistryDoctor 2007-03-19
  • 打赏
  • 举报
回复
有没有明显的分隔?
kbsoft 2007-03-19
  • 打赏
  • 举报
回复
字符串固定么?挺复杂的....,是不是要用IsDBCSLeadByte判断?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧