第七周:指针与字符串

1

单词长度(4分)

题目内容:

你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束。你要输出这行文本中每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如“it‘s”算一个单词,长度为4。注意,行中可能出现连续的空格。

输入格式:

输入在一行中给出一行文本,以‘.’结束,结尾的句号不能计算在最后一个单词的长度内。

输出格式:

在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

输入样例:

It‘s great to see you here.

输出样例:

4 5 2 3 3 4

时间限制:500ms内存限制:32000kb

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>

int main(int argc, const char * argv[]) {
    char c;
    int index = 0;
    char s[200] = {0};
    int count = 0;
    int outputFlag = 0;
    int spaceFlag = 0;
    do{
        scanf("%c", &c);
        if(c == ‘ ‘){
            if(outputFlag == 0 && count>0){
                if(spaceFlag==1){
                    printf(" ");
                }else{
                    spaceFlag = 1;
                }
                printf("%d",count);
                count = 0;
                outputFlag = 1;
            }
        }else{
            outputFlag = 0;
            count++;
        }
        s[index] = c;
        index++;
    }while (c!=‘.‘);
    if(count-1!=0){
        if(spaceFlag==1){
            printf(" ");
        }else{
            spaceFlag = 1;
        }
        printf("%d\n",count-1);
    }
    return 0;
}

  

2

GPS数据处理(6分)

题目内容:

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)推荐最小定位信息

字段1:UTC时间,hhmmss.sss格式

字段2:状态,A=定位,V=未定位

字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)

字段4:纬度N(北纬)或S(南纬)

字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)

字段6:经度E(东经)或W(西经)

字段7:速度,节,Knots

字段8:方位角,度

字段9:UTC日期,DDMMYY格式

字段10:磁偏角,(000 - 180)度(前导位数不足则补0)

字段11:磁偏角方向,E=东W=西

字段16:校验值

这里,“*”为校验和识别符,其后面的两位数为校验和,代表了“$”和“*”之间所有字符(不包括这两个字符)的异或值的十六进制值。上面这条例句的校验和是十六进制的50,也就是十进制的80。

提示:^运算符的作用是异或。将$和*之间所有的字符做^运算(第一个字符和第二个字符异或,结果再和第三个字符异或,依此类推)之后的值对65536取余后的结果,应该和*后面的两个十六进制数字的值相等,否则的话说明这条语句在传输中发生了错误。注意这个十六进制值中是会出现A-F的大写字母的。另外,如果你需要的话,可以用sscanf(s,"%d", &i)从字符串s中得到其所表达的整数数字给i。

现在,你的程序要读入一系列GPS输出,其中包含$GPRMC,也包含其他语句。在数据的最后,有一行单独的

END

表示数据的结束。

你的程序要从中找出$GPRMC语句,计算校验和,找出其中校验正确,并且字段2表示已定位的语句,从中计算出时间,换算成北京时间。一次数据中会包含多条$GPRMC语句,以最后一条语句得到的北京时间作为结果输出。

你的程序一定会读到一条有效的$GPRMC语句。

输入格式:

多条GPS语句,每条均以回车换行结束。最后一行是END三个大写字母。

输出格式:

6位数时间,表达为:

hh:mm:ss

其中,hh是两位数的小时,不足两位时前面补0;mm是两位数的分钟,不足两位时前面补0;ss是两位数的秒,不足两位时前面补0。

输入样例:

$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

END

输出样例:

10:48:13

时间限制:500ms内存限制:32000kb

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>

int main(int argc, const char * argv[]) {
    char finalStr[20] = {0};
    while(1){
        char s[1024];
        gets(s);
        if(strcmp(s, "END")==0){
            break;
        }else{
            char *p1 = strstr(s, "$GPRMC");
            char *p2 = strstr(s, "*");
            if(p1 && p2){
                int startIndex = 1;
                int endIndex= (int)(p2-p1-1);
                char startS = s[startIndex];
                int temp = startS;
                int result = 0;
                for(int i=startIndex+1;i<=endIndex;i++){
                    result = temp^s[i];
                    temp = result;
                }
                result = result%65536;
                char snumber[20];

                sprintf(snumber, "%X", result);
                char tnumber[20] = {0};
                int j = 0;
                for(int i=endIndex+2;i<strlen(s);i++){
                    tnumber[j++] = s[i];
                }
                if (strcmp(snumber, tnumber)==0){
                    char time[7] = {0};
                    j = 0;
                    for (int i=7;i<=12;i++){
                        time[j++] = s[i];
                    }

                    int hour1 = time[0]-‘0‘;
                    int hour2 = time[1]-‘0‘;
                    int hour = hour1*10+hour2;
                    hour = hour+8;
                    if(hour>23){
                        hour = hour-24;

                    }
                    hour1 = hour/10;
                    hour2 = hour%10;
                    sprintf(finalStr, "%d%d:",hour1,hour2);
                    finalStr[3] = time[2];
                    finalStr[4] = time[3];
                    finalStr[5] = ‘:‘;
                    finalStr[6] = time[4];
                    finalStr[7] = time[5];
                }
            }

        }
    }
    printf("%s\n", finalStr);
}

  

时间: 2024-12-07 13:15:32

第七周:指针与字符串的相关文章

网易云课堂程序设计入门--C语言第七周:指针与字符串学习笔记

====================================== 第七周:指针与字符串学习笔记 网易云课堂 程序设计入门–C语言 指针与字符串 学习笔记 ====================================== 7-1指针初步 7-1-1类型大小与取地址运算 sizeof是一个运算符 给出某个变量货类型在内存中所占据的字节数 sizeof(int); sizeif(i); double变量在内存中占据的空间是int变量的两倍 { int a; a =6; prin

2014025688 《嵌入式程序设计》第七周学习总结

2014025688(30) <嵌入式程序设计>第七周学习总结 有名管道 FIFO也称为有名管道,它是一种文件类型.FIFO简单理解,就是它能把两个不相关的进程联系起来,FIFO就像一个公共通道,解决了不同进程之间的"代沟".普通的无名管道只能让相关的进程进行沟通(比如父shell和子shell之间).FIFO严格遵循先进先出(first in first out),对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾.它们不支持诸如lseek()等文件定

20135302魏静静——linux课程第七周实验及总结

linux课程第七周实验及总结 实验及学习总结 1. 编译链接的过程和ELF可执行文件格式(以hello为例) GNU编译系统编译源码: 首先,运行C预处理器(cpp),将.c文件翻译成.i文件——gcc -E -o hello.cpp hello.c -m32 接着,运行C编译器(cc1),将.i文件翻译成ASCII汇编语言文件.s文件——gcc  -S -o hello.s hello.cpp -m32 然后,运行汇编器(as),将.s文件翻译成可重定位目标文件.o文件——gcc -c he

2018-2019-1 20165203 《信息安全系统设计基础》第七周学习总结

2018-2019-1 20165203 <信息安全系统设计基础>第七周学习总结 教材学习内容总结 异常 异常:异常就是控制流中的突变,用来响应处理器状态中的某些变化. 基本思想:如图所示 异常的类别: 中断 中断是异步发生的,是来自处理器外部的I/O设备的信号的结果. 处理方法:对于I\O设备,通过向处理器芯片上的一个引脚发信号,并将异常号放到系统总线上,来触发中断,这个异常号标识了引起中断的设备.当前指令完成执行后,处理器从系统总线读取异常号,调用适当的中断处理程序,处理器返回时,它就将控

20182310 第七周学习总结

20182310 2019-2020-1 <数据结构与面向对象程序设计>第七周学习总结 教材学习内容总结 1.链表实现栈 data存放数据点 next下一节点 存储地址 数据域 单链表:只含一个指针域的链表 a-> 双向链表:<-a-> 地址不一定连续 要用链表实现栈,就要操作链表的两端.所以除了一个指向链表首元素的引用(称为head)之外,还需要跟踪另一个指向链表末元素的引用(称为tail),还需要一个整型变量count来跟踪队列中的元素数目. 2.尾插法 Student

《七周七语言:理解多种编程范型》のruby课后习题答案

本系列是<七周七语言>的课后习题答案.这本书不拘泥于语法细节,而是横向比较各种编程语言(非热门)之间的编程范式. 是本对编程觉悟能有所帮助的好书,这里就不多做介绍了,感兴趣的同学不妨去看一下. 不得不说,Ruby的风格很黑客. 1. 打印字符串"Hello, world." puts "Hello, world." 2. 在字符串“Hello, Ruby.”中,找出"Ruby."所在下标. puts "Hello, Ruby

20145234黄斐《信息安全系统设计基础》第七周(Linux命令复习)

已经到了11月,学期过半,而<信息安全系统设计基础>这门课也要到了期中考试了.所以,我在这里,对前半个学期的最基础的知识,做一个复习 复习计划分为两步,本次为Linux命令,下次计划复习git与vim相关指令 本周学习内容在另一篇博客20145234黄斐<信息安全>第七周学习总结上 Linux命令 1.常用小技巧 tab 补全命令.补全目录.补全命令参数 Ctrl+c 终止当前运行的程序,但不结束终端 Ctrl+d 结束输入或退出终端 Ctrl+s 暂停当前程序,任意键恢复 Ctr

java第七周学习总结

学号20145336 <Java程序设计>第3周学习总结 教材学习内容总结 Lambda 在我们编写程序时,可以使用Lambda特性去除重复的信息.Lambda表达式中this的参考对象以及toString()的接受者,是来自Lambda的周围环境,也就是看Lambda表达式是在哪个名称范畴,就能参考该范畴内的名称,像是变量或方法.Lambda表达式只是定义函数接口操作的一种方式,除此之外,只要静态方法的方法签署中,参数与返回值定义相同,也可以使用静态方法来定义函数接口操作.在只有Lambda

20145123刘森明《Java程序设计》第七周学习总结

学习进度条 教材学习内容总结 第十一章1.静态sleep()用于流程暂停指定时间,单位是毫秒2.一个Thread被标记为Daemon线程,在所有非Daemon线程都结束时,JVM自动就会终止3.线程有优先权,数字越大优先权越高.如果优先权相同,则输流执行4.线程完成run()方法后,就会进入Dead5.线程一旦归入某个群组,就无法更换第十三章1.时间的度量格林威治标准时间 GMT世界时 UT国际原子时 TAI世界协调时间 UTCUnix时间 (不考虑闰秒修正,用以表达时轴上某一瞬间)2.重点 P

《七周七语言:理解多种编程范型》のIo课后习题答案

哎,因为上周忙着写OAuth2.0服务端框架草稿 ,耽误了一周学习Io Language了. 本篇习题解答是接着 <七周七语言:理解多种编程范型>のRuby课后习题答案 Io是原型语言,类似于JavaScript,并不区别类和对象,所有的东东都是对象,对象的数据结构就是由键值表来维护的(在Io中就是所谓的槽),通过各种消息传递给对象来实现打印输出,复制对象等功能.因为语法非常简单(也木有语法糖),所以你可以尽情构建自己的库和功能. 第一天: 1. 对1+1求值,然后对1+"one&q