补天网 - 编程与软件开发精华   出50分
分页显示
返回《编程与软件开发精华》 快速返回
作 者  主题:两个小面试题,不妨试试
awen


=八面玲珑=
职务:斑竹
积分:3416
贴数:2796
 日期:2005-9-12 17:39:40
最近面试一些人的时候的一些小题目,大家可以做做,全对的话给分

字符串转换成整数 
int atoi(const char *p_str)

将一个字符串逆序 
char *strrev(char *p_str)

study_2008


=一知半解=
积分:211
贴数:234
日期: 2005-9-19 19:16:40  
int atoi(const char *p_str)
{
  int result=0;
  int  index=0; 
   while(*(p_str+i)!=‘\0‘)
   {
     if(*(p_str+i)<‘0‘||*(p_str+i)>‘9‘))
       {
         i++;
         continue;
       }   //过滤非法字符  
      result=result*10+*(p_str+i)-‘0‘;
        i++;

   }
     return result;
 }
字符串逆转已经讨论过了,这里不在写了
awen


=八面玲珑=
职务:斑竹
积分:3416
贴数:2796
日期: 2005-9-24 22:27:32  
挺好,不过还有些问题。

1)如果是 "-123456" 会怎么样
2)如果传入的字符串是NULL会怎么样
3)考虑到了非法字符挺好,不过你觉得如果是"12a34"应该变为1234么
4)一个笔误,i应该是index
study_2008


=一知半解=
积分:211
贴数:234
日期: 2005-9-27 12:52:18  
多谢提醒,我以前没用过这个函数,当时写的时候只是运行了一下看看这个函数有什么功能,改一下
int atoi(const char *p_str)
{
  int result=0;
  int  index=0;  int sign=1;//sign代表符号
  
        
   while(*(p_str+index)!=‘\0‘)
   {
     if(*(p_str+index)<‘0‘||*(p_str+index)>‘9‘)
       {
         if(index==0)//  判断符号位
            if(*(p_str+index)==‘-‘||*(p_str+index)==‘+‘)
             {      sign=(*(p_str+index)==‘-‘)?-1:1;
                     index++;
                 continue;
             }
         
         break;
       }   //过滤非法字符  
      result=result*10+*(p_str+index)-‘0‘;
        index++;

   }
     return sign*result;
 }
2)如果传入的字符串是NULL会怎么样?

如果是null那么第一个循环就不能进行
while(*(p_str+index)!=‘\0‘)
由于result的初值为0,所以结果就是0啊;
我运行了一下,你提到的的错误已经修复
其实这边还存在溢出问题,不知你有没有注意到?
study_2008


=一知半解=
积分:211
贴数:234
日期: 2005-9-27 12:55:15  
兄弟是哪一家公司,我大四快毕业,可以介绍我去啊,呵呵
awen


=八面玲珑=
职务:斑竹
积分:3416
贴数:2796
日期: 2005-9-30 1:10:04  
改进很多,还是有些问题
雪婷


=心无二用=
积分:835
贴数:300
日期: 2005-10-6 15:22:30  
原来awen是这版主啊.呵呵.这是你的专长吧?厉害咯
study_2008


=一知半解=
积分:211
贴数:234
日期: 2005-10-10 18:50:51  
看了一下,应该是没有在字符串的开头判断空格
j_z1110


=入木三分=
积分:1215
贴数:1106
日期: 2005-10-15 19:07:05  
这个是哪家公司的面试题啊?晕我除了知道是C语言外就不知道是什么了?
l8487


=化零为整=
积分:14
贴数:24
日期: 2005-10-18 17:02:45  
晕了阿
我都快毕业的人了  学的还是高级编程  居然看不懂这个。懂一点拉
  也许是学的太多了吧  学过好多的编程软件了 
日了   
回去好好研究C语言
yangxg9988


=化零为整=
积分:6
贴数:6
日期: 2005-10-31 15:22:30  
可怜,就是很懂。我真是菜得很。
alpha_liu


=七步之才=
职务:版主
积分:445
贴数:555
日期: 2005-11-5 18:23:29  
awen同志是ms的高手,各位努力学习吧。
jellycc


=化零为整=
积分:3
贴数:3
日期: 2005-11-7 23:20:21  
哇好厉害!!!我是新丁!!不过是个很努力的新丁,请各位前辈多多指教!!
一滴雨


=四大皆空=
积分:2246
贴数:602
日期: 2007-4-4 12:50:51  
#include
using namespace std;
int satoi(const char *p_str)
{
  int result=0;
  int  index=0;  int sign=1;//sign代表符号
  
  if(index==0)//  判断符号位
     if(*(p_str+index)==‘-‘||*(p_str+index)==‘+‘)
        {  
         sign=(*(p_str+index)==‘-‘)?-1:1;
         index++;
//         continue;
         }   
   while(*(p_str+index)!=‘\0‘)
   {
     if(*(p_str+index)<‘0‘||*(p_str+index)>‘9‘)
       { 
        // index++; 
       //  break;
       }
     else
     {//过滤非法字符  
      result=result*10+*(p_str+index)-‘0‘;
     }
      index++;
   }
     return sign*result;
 }

void main()
{
    char a[100];
    cin>>a;
    cout<    cout<<satoi(a)<<endl;

}
返回《编程与软件开发精华》 快速返回

IE不断爆出漏洞,使用FireFox浏览器,会更安全一些:

如果您想发帖,请先注册或登录!


Copyright © 2006 Patching.net All rights reserved.