C博客作业--指针
一、PTA实验作业
题目1:6-5 判断回文字符串
1. 本题PTA提交列表
2. 设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
自己最初以为最后会i=j的时候结束并满足,调试后发现最后的i不会等于j,根据回文的特点会继续满足而改变,最终i会等于strlen(s)
而且由于动态赋值的问题,循环要记得结束条件,保证次数,自己把条件修改后正确
题目2:6-7 过滤字符串只保留串中的字母字符
1. 本题PTA提交列表
2. 设计思路
定义循环变量 i=0计数变量count=0;
while*ptr!='\0'进入循环
如果*ptr是字母
count++计算字母个数
否则
*ptr='\0'把非字母清'\0'
ptr++;
end
返回 count;
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
自己最开始的思路是想用新的字符数组存放满足的数,然后让指针指向新的该字符数组,但是,运行后发现不会像自己想象中的改变
查询后发现自己的做法不能改变原有的变量情况,后改正思路,把不满足的数赋上’\0'才正确
题目3:6-9 求子串在母串中最后一次出现的地址
1. 本题PTA提交列表
2. 设计思路
定义循环变量 i=0,j,count=0用于记下子串的位置
while(*s!='\0')进行循环
当*s=*t 时
j=0 清0开始
while(*(t+j)!='\0')进行内循环
当*s!=*(t+j)时
break;
s++;j++;i++;
end内循环
当*(t+j)='\0'时
count=i-j;
*s=*t的条件结束
s++;i++;
end外循环
若count!=0
则s=s-i+count并返回地址 s
其他情况
返回 NULL
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
运行出错,调试后发现自己s++放的位置只在循环内
改正后自己的运行在能找到时总是崩溃,之后发现自己在满足时忘记返回地址
二、截图本周题目集的PTA最后排名
三、阅读代码
这是pta字符数组中7-7 删除字符串中的子串的代码
该代码非常的简洁,自己在思考这道题时想了很久也很复杂,因为考虑到删除后的字母还能在重新组合并满足删除的条件,自己当时对循环判断这个删除情况有点吃力
但是该代码利用一个新的字符数组存放每次删除后的字符串,重复删除直至不在有可删除的字符串,而且用do while很巧妙,代码效率也高
该题灵活的运用库函数让代码变得简洁明了,利用isdigit(s)判断数字,用两个字符数组来分别存放数字与字母,最后利用strcat(p,t)来进行连接,很巧妙
四、本周学习总结
1指针是以地址作为值的变量,而数组名是一个特殊的固定地址,可以看做常量指针
p=a;
p=&a[0];
等价,*(a+i)等价a[i]
p=p+1是合法的,但a=a+1不合法
2指针的算数运算只包括两个相同类型的指针相减以及指针加上或减去一个整数
3字符串的输入输出
(1)scanf 遇到回车或空格停止
(2)gets()遇到回车结束
(3)printf遇到‘\0'结束输出
(4)puts()输出遇到'\0'自动转为’\n'
4字符串的复制,连接和比较以及长度
(1)复制 strcpy(s1,s2)把s2复制到s1
(2)连接 strcat(s1,s2)把s2连接到s1后面
(3)比较 strcmp(s1,s2)相等返回0,s1>s2返回正数s1<s2返回负数
(4)长度 strlen(s1)有效个数,不包括'\0'
5结构类型定义的一般形式
struct 结构名{
类型名 结构成员1;
类型名 结构成员2;
...
类型名 结构成员n;
};
分号结束
6在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型
7结构变量也可以在定义时对其赋初值
8嵌套定义的结构变量中,每个成员按从左到右,从外到内的方式引用
9结构运算符优先级高于一般运算符
10如果俩个结构变量具有相同的类型,允许将一个结构变量的值直接赋给另一个
11对结构数组元素成员的引用一般格式: 结构数组名【下标】.结构成员名
12结构指针的值实际是结构变量的首地址,即第一个成员的地址
访问方法:
(1)p->num=10
(2)(* p).num=101 括号要记得