指针

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.对齐法则;

2.罗列本周一些错题。

posted @ 2017-12-17 23:01  哟呵~  阅读(237)  评论(1编辑  收藏  举报