高手帮忙看看代码哪里有问题啊。。。

jax_lee 2011-08-11 03:04:47
//获取子字符串个数
int GetSubStrCount(CString &str,char cFlag)
{
cFlag = ',';
int i = 0;
BOOL isHas = FALSE;

for (int iStart = -1; -1 != (iStart = str.Find(cFlag,iStart+1)) ; i++)
{
isHas = TRUE;
}

if (!isHas)
{
return 0;
}
else
{
return i+1;
}
}

//获取子字符串
// i 序号 0
CString GetSubStr(CString &str,int i,char cFlag)
{
i = 0;
cFlag = ',';
int iStart = -1;
int iEnd = 0;
int j = 0;
int iStrCount;

iStrCount = GetSubStrCount(str,cFlag);

if (i>iStrCount -1 || i<0)
{
str = "";
return str;
}
else
{
//do nothing
}

if (i == iStrCount-1)
{
i = iStrCount;

for (;j<i-1;j++)
{
iStart = str.Find(cFlag , iStart+1);
}

return str.Mid(iStart+1 , str.GetLength()-iStart-1);
}
else
{
//do nothing
}

for (; j<i; j++)
{
iStart = str.Find(cFlag , iStart+1);
}

iEnd = str.Find(cFlag , iStart+1);
return str.Mid(iStart+1 , iEnd-iStart-1);
}


void CGpsDataView::OnFileRead()
{
// TODO: 在此添加命令处理程序代码
CStdioFile myFile;
CString oneLine;
int i = 0;
char cFlag = ',';
CString subStr[20];



if(!myFile.Open(_T("gps.txt"),CFile::modeRead | CFile::typeText))
{
AfxMessageBox(_T("打开文件错误!"));
return;
}
else
{
/*do nothing*/
}

while (myFile.ReadString(oneLine))
{
MessageBox(oneLine);
int j = GetSubStrCount(oneLine,cFlag);

for (j;j>0;j--)
{
subStr[j] = GetSubStr(oneLine,i,cFlag);

MessageBox(subStr[j]);
oneLine = oneLine.Right( strlen((LPSTR)(LPCTSTR)oneLine)
-strlen((LPSTR)(LPCTSTR)subStr[j]));
}
}

myFile.Close();
}

oneLine 的形式是:$GPGGA,010648.00,2307.594068,N,11321.993772,E,1,07,1.1,31.1,M,-5.2,M,,*48
我循环提取一段段 只能显示出$GPGGA 这一段,老出来这一个。。。。
为什么。。
...全文
71 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jax_lee 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 jax_lee 的回复:]
//获取子字符串个数
int GetSubStrCount(CString &str,char cFlag)
{
cFlag = ',';
int i = 0;
BOOL isHas = FALSE;

for (int iStart = -1; -1 != (iStart = str.Find(cFlag,iStart+1)) ; i+……
[/Quote]





void CGpsDataView::OnFileRead()
{
// TODO: 在此添加命令处理程序代码
CStdioFile myFile;
CString oneLine;

char cFlag = ',';
CString subStr[20];



if(!myFile.Open(_T("gps.txt"),CFile::modeRead | CFile::typeText))
{
AfxMessageBox(_T("打开文件错误!"));
return;
}
else
{
/*do nothing*/
}

while (myFile.ReadString(oneLine))//读一行
{
MessageBox(oneLine);
int j = GetSubStrCount(oneLine,cFlag); //得到该行的子字符串个数
MessageBox(_T("校验中..."));

if(CheckNum(oneLine))
{
MessageBox(_T("数据接收正确!..."));
for (int i=0;i<j;i++)
{
subStr[i] = GetSubStr(oneLine,i,cFlag);
MessageBox(subStr[i]);
}
}
else
{
AfxMessageBox(_T("数据接收错误!..."));
}
}

myFile.Close();
}
已经解决了 。。我用的是VS2008 由于那个多字节和unicode的关系。。配置了一下就ok了
jax_lee 2011-08-11
  • 打赏
  • 举报
回复
那如何修改呢 [Quote=引用楼主 jax_lee 的回复:]
//获取子字符串个数
int GetSubStrCount(CString &str,char cFlag)
{
cFlag = ',';
int i = 0;
BOOL isHas = FALSE;

for (int iStart = -1; -1 != (iStart = str.Find(cFlag,iStart+1)) ; i+……
[/Quote]
至善者善之敌 2011-08-11
  • 打赏
  • 举报
回复
因为subStr[j] = GetSubStr(oneLine,i,cFlag);//这里i=0;永远不变化

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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