初次社招面试遇到的问题

来源:互联网 发布:市政工程造价软件广西 编辑:程序博客网 时间:2024/06/04 18:04

     两个问题都是字符串类型的。

     第一个问题是机考的第二题,第二个问题是技术面时考官考察我的问题。

   第一个问题:

        输入一个字符串(长度最大128字节),格式如”1,23,45,2,128,9”从中计算是2的整数次幂的数的个数。

        当时调试程序,判断一个整数是否是2的整数次幂的算法,我是用了递归调用的方法很快就调通了,但是从字符串中提取数字的程序一直困扰到答题结束。之后技术面的时候,还和面试官讨论了这个问题,从面试官那得到了提示下,回到家后试了下strtok函数终于调通了这是后话。

粘出相关代码:

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

//判断一个非负整数是否是的整数次幂

bool judge2mi(unsignedint num)

{

  unsigned int tmp=0;

  bool result=false;

  if(num==0)

  {

      return false;

  }

  else

  if(num==1)

  {

    return true;

  }

  else

  if(num%2==0)

  {

     tmp=num/2;

     result=judge2mi(tmp);//递归调用

  }

  else

  {

      return false;

  }

  return result;

}

/*将数字字符串转化为数字

  参数:表示数字的字符串,如,,45,,123

  参数:数组存放从参数中提取的数字

  返回值:提取的数字个数

*/

int str2int(char *str,int num[64])

{

  unsigned int result;

  int i=0;

  char *token=NULL;

  char seps[]=",";

  token=strtok(str,seps);

  printf("提取的数:\r\n");

  while(token!=NULL)

  {

     num[i]=_strtoi64(token,NULL,0);

     printf("%d\r\n",num[i]);

     // printf("%s\r\n",token);

     i++;

     token=strtok(NULL,seps);

  }

  return i;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

    bool result=false;

    unsigned int num=0;

    char str[128],i=0;

    int str2num[64]={0},m=0;

    scanf("%s",str);

    m=str2int(str,str2num);

    /*for(i=0;i<63;i++)

       printf("%d\r\n",str2num[i]);*/

    printf("偶数:\r\n");

    for(i=0;i<m;i++)

    {

      result=judge2mi(str2num[i]);

      if(result==true)

      {

          printf("%d\r\n",str2num[i]);

          num++;

      } 

    }

    printf("num is :%d",num);

    return 0;

}

第二个问题:

        输入一个字符串1例如“afsadfasdf,和字符串2as”,查找字符串2在字符串1中出现的次数。

       当时我没有想到strstr函数,很汗,平时对字符串的操作极少,这个都不知道,我当时给出的方式是自己写的函数,比较繁琐。

       期间在谈论如何计算一个字符串的长度时,讨论了sizeof关键字和strlen()的用法。

      char * str=asfdf;    sizeof(str)  4    strlenstr 5

     char str[]=asfdf;    sizeof(str)  6     strlenstr 5  

     char str[10]=asfdf;  sizeof(str)  10    strlenstr 5

     sizeof的操作对象是类和变量,而函数strlen的操作对象是字符串,且长度不计入’\0’。

粘出相关代码:

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

int _tmain(int argc, _TCHAR* argv[])

{

    char *str1=(char*)malloc(1024);

    char *str2=(char*)malloc(1024);

    char *pdest=NULL;

    int result=0;

    scanf("%s %s",str1,str2);

    //scanf("%s",str1);

    //scanf("%s",str2);

    printf("%s\r\n",str1);

    printf("%s\r\n",str2);

    pdest=strstr(str1,str2);

    while(pdest!=NULL)

    {

       result++;

       pdest+=strlen(str2);

       pdest=strstr(pdest,str2);

    }

    printf("result:%d",result);

    return 0;

}

        还有一点,作为一位软件工程师,工作中的代码量是值得注意的。我就没概念,当面试官问我去年的代码量时,我随口报出2000+,一度让面试官以为我不怎么写代码,后来回到单位看了下最近一个月写的单片机程序都1000+行了,去年实际我写的应用在工程中的代码足足有10000+行。感觉,作为一名应聘者我还是蛮low的。毕业后第一次跳槽前的面试心得,纪念下。

0 0
原创粉丝点击