C语言第七次实验课第三题——指针

sy7_3.c

字符串提取处理,编写main函数,输入字符串,调用函数extract把字符串中一串连续数字字符合并一个八进制整数,作为十进制整数存入int类型数组中,并输入。要求:extract(char*,int d[])。

测试数据:1)输入100bc89202*1,将输出64 130 1。

     2)输入q2t0,将输出2 0。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void extract(char *a,int d[]);
int main()
{
  int d[100];
  char a[100];
  printf("请输入字符串:\n");
  gets(a);           //gets字符串(输入字符串)
  extract(a,d);
  return 0;
}
void extract(char *a,int d[])
{
  int i,j=0,flag=0,t=0;
  for(i=0;a[i]!='\0';i++)
  {
    if(a[i]>='0'&&a[i]<='7'&&flag==0)
    {
      flag=1;   //flag用于标记
      t=(int)a[i]-'0';  //将字符数组某一元素八进制数(视作)放在t中(字符型数组转化为数字数字[字符串里的数字属于字符]——强制类型转换)

            //字符数组里面的数字是以ascll码储存,整型数组里面的数字是以该整数储存

            //所以减去'0'(0的ascll码)

    }         //结束第一个if并i+1


    else if(a[i]>='0'&&a[i]<='7'&&flag!=0)
    t=t*8+(int)a[i]-'0';  //flag的作用开始显现:将高位*8+a[下一位]放入t中


    else if(flag!=0)   //识别到了字符串里的字母
    {
      d[j]=t;     //存储数字
      j++;
      flag=0;    //重置flag为0
    }
  }
  if(a[i-1]>='0'&&a[i-1]<='7')    //当循环最后一个数为数字时:执行了第二个if(将数字变成八进制放在t中)并没有执行第三个if,因此补充一个if用来将t放入数组d中

  {
    d[j]=t;  
    j++;
  }
  int k=0;
  for(k;k<j;k++)
  {
    printf("%d ",d[k]); //输出数组d
  }
}

posted @ 2020-12-20 00:00  HosenTin  阅读(145)  评论(0)    收藏  举报