指针
6-5 判断回文字符串(20 分)
1. 本题PTA提交列表:
2. 设计思路:
int 变量i和j=0
while when *(s+i)!='\0'
i自增
end
j=i-1;i=0
while when i<j
如果*(s+i)不等于*(s+j)
返回false;
i++;
j--;
end
返回true
3.代码截图:
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 1.一开始使用strcmp来比较字符是否相等,错误,strcmp用来比较的是两个完整的字符串;
- 2.将while(i<j)写成while(i!=j),导致偶数个字符串的循环无法结束;
- 3.本题还算顺利,没有遇到很多问题;
6-7 过滤字符串只保留串中的字母字符:
1. 本题PTA提交列表:
2. 设计思路
定义 *ptr表示输入的字符,i,j=0,count=0,str[80]表示存储过滤后的字符串
for i=0 to *(ptr+i)!='\0 i自增
如果*(ptr+i)>='a'&&*(ptr+i)<='z'||*(ptr+i)>='A'&&*(ptr+i)<='Z'
count++
str[j]=*(ptr+i)
j自增
end for
str[j]='\0';
str复制to ptr
返回 count
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 1.没有写 #include string.h,导致编译错误;
- 2.在写if((ptr+i)>='a'&&(ptr+i)<='z'||(ptr+i)>='A'&&(ptr+i)<='Z')条件时,忘记加等于号;
6-8 使用函数实现字符串部分复制(20 分)
1. 本题PTA提交列表:
2. 设计思路:
定义i,j=0;
for i=m-1 to *(t+i)!=0 i自增
*(t+j)=*(t+i);
j自增
end for
*(t+j)=0;
将t复制到s
3.代码截图:
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 1.一次就对,基本没问题;
二、截图本周题目集的PTA最后排名。
三、阅读代码:
- 1.这篇代码思路简洁明了,在输入的同时又统计了个数,方法很巧妙,利用了空格和字符间穿插的规律,值得学习;
#include<stdio.h>
int mate(char ch[],int n);
int main(){
int i,n;
scanf("%d",&n);
char ch[n];
getchar();
for(i=0;i<n;i++)
scanf("%c",&ch[i]);
if(mate(ch,n)) printf("True");
else printf("False");
return 0;
}
int mate(char ch[],int n){
int i,count1=0,count2=0;
for(i=0;i<n;i++){
if(ch[i]=='(') count1++;
else if(ch[i]==')'){
if(count1==0) return 0;//不匹配
else count1--;//匹配
}
else if(ch[i]=='{') count2++;
else if(ch[i]=='}'){
if(count2==0) return 0;//不匹配
else count2--;//匹配
}
}
if(count1==0&&count2==0&&n!=0) return 1;
else return 0;
}
这段代码是判断数学括号使用是否准确,它设置了两个变量count1和count2,设初值都为0,遇到‘(’和‘)’时都加1,遇到‘{’和'}就减1,这样可以同时保证括号个数相等且位置不会颠倒,相比之下虽然我有考虑到个数和位置颠倒问题,但是思路却没有它的简洁,
这是我根据以上代码修改的代码:
#include<stdio.h>
int main()
{
int k,z;
int count=0,flag=0,n;
char a[100000];
scanf("%d\n",&n);
for(z=0;z<n;z++)
scanf("%c",&a[z]);
for(k=0;k<n;k++)
{
if(a[k]=='('){
count++;
}
if(a[k]==')'&&count>0){
count--;
}
if(a[k]=='{'){
flag++;
}
if(a[k]=='}'&&flag>0){
flag--;
}
}
if(!count&&!flag)
printf("True");
else printf("False");
}
感觉改完之后思路基本没差了;
四、本周学习总结(1分)
1.自己总结本周学习内容。
- 1.结构的定义以分号结束(C语言把结构定义看成一条语句);
- 2.结构体优点:提供一种便利手段,将不同类型的相关信息组织在一起;
- 3.如果有与坐标有关的相关题型,可以用结构定义来确定一个点的坐标;
struct point {
double x;
double y;
};
- 4.嵌套定义:
struct address{
char city[10];
char street[20];
int code;
int zip;
}:(这是成员结构体)
struct nest_student{
int num;
char name[10];
struct address addr;
int computer,english,math;
double average;
}:
- 5.嵌套定义的优点:有利于对数据的深入分析和处理;(注意:必须先定义成员的结构类型,再定义主结构类型)
结构定义先后顺序:
成员结构类型—>主结构类型—>定义结构变量;
-
6.定义结构变量的三种方式;
-
1.单独定义
struct student s1;
- 2.混合定义
struct student{}s1,s2;
- 3.无类型名定义:省略结构名,只能定义一个结构变量;
- 7.结构变量的初始化(初始化表的方法)
struct student s1={101,"zhang",78,87,85};
- 8.对齐法则;