从屏幕读取字符串,并提取其中数字串,再次打印到屏幕或写入一个文件

来源:互联网 发布:oracle数据库最高权限 编辑:程序博客网 时间:2024/06/05 07:05

  毕业两年多,几乎天天游弋在代码的海洋中,每天都在跟茫茫的多媒体SDK和开源库打交道,这次去XXXX公司面试中却无法脱机写个简单字符串程序。思路流程虽然清楚(当时只是画了个流程图写了几个伪代码),但实现时发现自己平时很少用这些系统函数,编码时发现对系统函数入口参数,返回参数模棱两可。关键一点还是平时写代码太依赖一linux的系统man命令帮助查找,平时写代码几乎很少人为去记忆这些系统函数入口参数,返回值等。因为这系统函数都是标准的C库函数,linux桌面系统如ubuntu,基本上man一下就懂了,最惨的情况下去查一下C库。这次面试离开电脑,一张纸,一支笔就显得茫然。下文是回家后借助于linux的系统的MAN命令和GCC调试编码实现。以告诫和警示自己。

实现方法1:


/************************************************************  文件摘要: 本文利用gets 实现从屏幕(标准输入stdin)读取字符,并将其中的数字  字符打印出来或者存在到一个文件中*/#include<stdio.h>#include <stdlib.h> /*************************************************************************** 函数名称:ReadDigit* 功能描述:从屏幕读取字符串,并提取数字,将数字保存起来或打印到屏幕* 输入参数:无* 输出参数:    无* 返 回值:失败:-1; 成功:0?* 修改日期  版本号 修改人 修改内容* -----------------------------------------------* 2014/8/6 V1.0hfl  XXXX***************************************************************************/int ReadDigit(void){      int flag = 1;char buf1[1024];char buf2[1024];int i=0,j=0;FILE *fp;fp = fopen("chars2.txt","w");if (fp==NULL){  printf("The file is creat failed\n");  return -1;}gets(buf1);while((buf1[i]!='\0')&&(i<1024)){   if((buf1[i]<='9')&&(buf1[i]>='0'))  {  buf2[j++]=buf1[i];  if(flag==1)  {  printf("screen=%d\n",atoi(&buf1[i]));  flag=0;  }    }  else  {     flag=1;  }   i++;}printf("buf2=%d\n",atoi(buf2));buf1[j]='\0';#if 1if((fwrite(buf2,j,1,fp))!=1){  printf("write is failed \n");  fclose(fp);  return -1;}fclose(fp);#endifreturn 0;}/*************************************************************************** 函数名称:main* 功能描述:一个进程的入口* 输入参数:无* 输出参数:    无* 返 回值:无* 修改日期  版本号 修改人 修改内容* -----------------------------------------------* 2014/8/6 V1.0hfl  XXXX***************************************************************************/void main(){   int rc = -1;   rc = ReadDigit();  if(-1 == rc )  printf("ReadDigit from screen is failed\n");}


调试结果如下:

实现方法2:

/************************************************************  文件摘要: 本文利用getchar 实现从屏幕(标准输入stdin)读取字符,并将其中的数字  字符打印出来或者存在到一个文件中*/#include<stdio.h>#include <stdlib.h> /*************************************************************************** 函数名称:ReadDigit* 功能描述:从屏幕读取字符串,并提取数字,将数字保存起来或打印到屏幕* 输入参数:无* 输出参数:    无* 返 回值:失败:-1; 成功:0?* 修改日期  版本号 修改人 修改内容* -----------------------------------------------* 2014/8/6 V1.0hfl  XXXX***************************************************************************/int ReadDigit(void){  int flag = 1;char buf[1024];int i=0;FILE *fp;fp = fopen("chars.txt","w");if(NULL == fp){           printf("The file is Open fail\n");   return -1;  }      while(flag != EOF){   flag = getchar();   if( flag == EOF )     {     break;     }  else     {    if(flag<='9'&&flag >='0')    {  #if 1  buf[i]=flag;      i++;  if(1024==i)   printf("The buf is full");  #endif      }      } }printf("buf=%d\n",atoi(buf));buf[i]='\0';#if 1if((fwrite(buf,i,1,fp))!=1){  printf("write is failed \n");  fclose(fp);  return -1;}fclose(fp);#endifreturn 0;}/*************************************************************************** 函数名称:main* 功能描述:一个进程的入口* 输入参数:无* 输出参数:    无* 返 回值:无* 修改日期  版本号 修改人 修改内容* -----------------------------------------------* 2014/8/6 V1.0hfl  XXXX***************************************************************************/void main(){   int rc = -1;   rc = ReadDigit();  if(-1 == rc )  printf("ReadDigit from screen is failed\n");}


调试效果


0 0