在我的QT程序中需要从管道文件中读入一串从底层传来的字符串,这个字符串包含了6个数据信息,分别以*号分割,数据信息前有此数据的注释,因而可以取“:”号和“*”号之间的字符创建6个新的字符串,再把这些字符串显示在QT界面上。
方法很死板,很粗糙,只求结果对了
#include <stdio.h>
#include <string.h>
int main()
{
int i=0,j=0,p;
char* buf = "lon:1 *lat:22*az:333*pitch:4444*dist:55555*power:66*";
/*
sprintf(buf,"lon:%s\n lat:%\n az:%s\n pitch:%s\n dist:%s\n power:%d\n",
(char *)(stPositInfo.lon), (char *)(stPositInfo.lat),
(char *)(stPositInfo.az), (char *)(stPositInfo.pitch),
(char *)(stPositInfo.dist), pw);
*/
char lon[20],lat[20],pitch[20],dis[20],pw[20];
if(i<strlen(buf))
{
while(*(buf+i)!=':')
{
i++;
}
if(*(buf+i)==':')
{
i++;
while(*(buf+i)!='*')
{
lon[j]=*(buf+i);
j++;
i++;
}
}
lon[j]='\0';
printf("%d--------%d\n",i,j);
printf("%s\n",lon);
j=0;
while(*(buf+i)!=':')
{
i++;
}
if(*(buf+i)==':')
{
i++;
while(*(buf+i)!='*')
{
lat[j]=*(buf+i);
j++;
i++;
}
}
lat[j]='\0';
printf("%d--------%d\n",i,j);
printf("%s\n",lat);
j=0;
while(*(buf+i)!=':')
{
i++;
}
if(*(buf+i)==':')
{
i++;
while(*(buf+i)!='*')
{
pitch[j]=*(buf+i);
j++;
i++;
}
}
pitch[j]='\0';
printf("%d--------%d\n",i,j);
printf("%s\n",pitch);
j=0;
while(*(buf+i)!=':')
{
i++;
}
if(*(buf+i)==':')
{
i++;
while(*(buf+i)!='*')
{
dis[j]=*(buf+i);
j++;
i++;
}
}
dis[j]='\0';
printf("%d--------%d\n",i,j);
printf("%s\n",dis);
j=0;
while(*(buf+i)!=':')
{
i++;
}
if(*(buf+i)==':')
{
i++;
while(*(buf+i)!='*')
{
pw[j]=*(buf+i);
j++;
i++;
}
}
pw[j]='\0';
printf("%d--------%d\n",i,j);
sscanf(pw,"%d",&p);
printf("%d\n",p);
j=0;
}
}
附:fgets函数可以每行每行读,把分割符‘*’换成‘\n’直接用while(fgets(char*,n,filename)==NULL) {存字符串程序} 应该也可以,没有试过。