C语言习题指针与字符串较难.docx
GPS 数据处理 题目内容题目内容 NMEA-0183 协议是为了在不同的 GPS(全球定位系统)导航设备中建立统一的 BTCM(海事无线电技术 委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Electronics Associa-tion)制定的 一套通讯协议。GPS 接收机根据 NMEA-0183 协议的标准规范,将位置、速度等信息通过串口传送到 PC 机、PDA 等设备。 NMEA-0183 协议是 GPS 接收机应当遵守的标准协议,也是目前 GPS 接收机上使用最广泛的协议,大多 数常见的 GPS 接收机、GPS 数据处理软件、导航软件都遵守或者至少兼容这个协议。 NMEA-0183 协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有GPGGA、GPGSA、 GPGSV、GPRMC、GPVTG、GPGLL 等。 其中GPRMC 语句的格式如下 GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A*50 这里整条语句是一个文本行,行中以逗号“,”隔开各个字段,每个字段的大小(长度)不一,这里的示例只 是一种可能,并不能认为字段的大小就如上述例句一样。 字段 0 GPRMC, 语句 ID, 表明该语句为 Recommended Minimum Specific GPS/TRANSIT Data (RMC) 推荐最小定位信息 字段 1UTC 时间,hhmmss.sss 格式 字段 2状态,A定位,V未定位 字段 3纬度 ddmm.mmmm,度分格式(前导位数不足则补 0) 字段 4纬度 N(北纬)或 S(南纬) 字段 5经度 dddmm.mmmm,度分格式(前导位数不足则补 0) 字段 6经度 E(东经)或 W(西经) 字段 7速度,节,Knots 字段 8方位角,度 字段 9UTC 日期,DDMMYY 格式 字段 10磁偏角,(000 - 180)度(前导位数不足则补 0) 字段 11磁偏角方向,E东 W西 字段 16校验值 这里,“*”为校验和识别符,其后面的两位数为校验和,代表了“”和“*”之间所有字符(不包括这两个字符) 的异或值的十六进制值。上面这条例句的校验和是十六进制的 50,也就是十进制的 80。 提示运算符的作用是异或。将和*之间所有的字符做运算第一个字符和第二个字符异或,结果再和第 三个字符异或,依此类推之后的值对 65536 取余后的结果,应该和*后面的两个十六进制数字的值相等, 否则的话说明这条语句在传输中发生了错误。注意这个十六进制值中是会出现 A-F 的大写字母的。 现在,你的程序要读入一系列 GPS 输出,其中包含GPRMC,也包含其他语句。在数据的最后,有一行 单独的 END 表示数据的结束。 你的程序要从中找出GPRMC 语句,计算校验和,找出其中校验正确,并且字段 2 表示已定位的语句,从 中计算出时间,换算成北京时间。一次数据中会包含多条GPRMC 语句,以最后一条语句得到的北京时间 作为结果输出。 你的程序一定会读到一条有效的GPRMC 语句。 输入格式输入格式 多条 GPS 语句,每条均以回车换行结束。最后一行是 END 三个大写字母。 输出格式输出格式 6 位数时间,表达为 hhmmss 其中,hh 是两位数的小时,不足两位时前面补 0;mm 是两位数的分钟,不足两位时前面补 0;ss 是两位 数的秒,不足两位时前面补 0。 输入样例输入样例 GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A*50 END 输出样例输出样例 104813 时间限制时间限制500ms 内存限制内存限制32000kb 答案 include include include char *searchStrchar *p 搜索关键字,并返回指针,没找到返回 0 char s“GPRMC“; char *spstrstrp,s; ifsp return sp; return 0; char *getNextPStrchar *p 得到下一个题目要求的字符串,返回指针 char * sp searchStrp; char * pstr p; while1 pstrpstrstrlenpstr1; spsearchStrp; ifspp return sp; return 0; int xtoiint num 16 进制转 10 进制 int a,b,out0; ifnum24 h - 24; outTimeh; printf““; outTimem; printf““; outTimes; return 0;