|
| 作 者 | 主题:两个小面试题,不妨试试 |
awen![]() =八面玲珑= 职务:斑竹 积分:3416 贴数:2796 |
最近面试一些人的时候的一些小题目,大家可以做做,全对的话给分 字符串转换成整数 int atoi(const char *p_str) 将一个字符串逆序 char *strrev(char *p_str) |
study_2008![]() =一知半解= 积分:211 贴数:234 |
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 |
挺好,不过还有些问题。 1)如果是 "-123456" 会怎么样 2)如果传入的字符串是NULL会怎么样 3)考虑到了非法字符挺好,不过你觉得如果是"12a34"应该变为1234么 4)一个笔误,i应该是index |
study_2008![]() =一知半解= 积分:211 贴数:234 |
多谢提醒,我以前没用过这个函数,当时写的时候只是运行了一下看看这个函数有什么功能,改一下 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 |
兄弟是哪一家公司,我大四快毕业,可以介绍我去啊,呵呵 |
awen![]() =八面玲珑= 职务:斑竹 积分:3416 贴数:2796 |
改进很多,还是有些问题 |
雪婷![]() =心无二用= 积分:835 贴数:300 |
原来awen是这版主啊.呵呵.这是你的专长吧?厉害咯 |
study_2008![]() =一知半解= 积分:211 贴数:234 |
看了一下,应该是没有在字符串的开头判断空格 |
j_z1110![]() =入木三分= 积分:1215 贴数:1106 |
这个是哪家公司的面试题啊?晕我除了知道是C语言外就不知道是什么了? |
l8487![]() =化零为整= 积分:14 贴数:24 |
晕了阿 我都快毕业的人了 学的还是高级编程 居然看不懂这个。懂一点拉 也许是学的太多了吧 学过好多的编程软件了 日了 回去好好研究C语言 |
yangxg9988![]() =化零为整= 积分:6 贴数:6 |
可怜,就是很懂。我真是菜得很。 |
alpha_liu![]() =七步之才= 职务:版主 积分:445 贴数:555 |
awen同志是ms的高手,各位努力学习吧。 |
jellycc![]() =化零为整= 积分:3 贴数:3 |
哇好厉害!!!我是新丁!!不过是个很努力的新丁,请各位前辈多多指教!! |
一滴雨![]() =四大皆空= 积分:2246 贴数:602 |
#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; } |
| 返回《编程与软件开发精华》 快速返回 | |
|
| |
|
|
如果您想发帖,请先注册或登录!
| Copyright © 2006 Patching.net All rights reserved. |