两则简单面试题
之前看到一个面试题目:
将字符串转换成整型数字,当时一想有点没头绪,没办法自己学的太烂了,还不具备编程思想,算法也是一塌糊涂。今天写了下程序,特在这里记录下:
/********************** Description: 将字符串转换成相应的整型数 例如:“653”-> 653 ********************/ #include <stdio.h> int strtoint(char s[]) { int i,n; n=0; for(i=0; s[i]>='0' && s[i]<='9'; ++i) { n=10*n+(s[i]-'0'); } return n; } int main() { char s[]={"4672"}; int number; number=strtoint(s); printf("输出整数型数字为:%d\n",number); system("pause"); return 0; }
表达式:s[i]-'0',能够计算出s[i]中存储的字符所对应的数字值。
第二个:
/****************** Description: 将大写字母转换成小写形式;只对ASCII字符集有效 ******************/ int lower(int c) { if(c>='A' && c<='Z') return c+'a'-'A'; else return c; }
作为一个较大的例子,我们来重新编写将字符串转换为对应数值的函数strtoint。
这里编写的函数比上面的要更通用,它可以处理可选的前导空白符以及一个可选的加(+)活减(-)号。
解析:
如果有空白符的话,则跳过;如果有符号的话,则读取符号;取整数部分,并执行转换:
int strtoint(char s[]) { int i, n, sign; for(i=0; isspace(s[i]); i++) //跳过空白符 ; sign=(s[i]=='-') ? -1 : 1; if(s[i]=='+' || s[i]=='-') //跳过符号 i++; for(n=0; isdigit(s[i]); i++) n=10*n+(s[i]-'0'); return sign*n; }
通用性还是不咋滴,输入格式限制成"...+X"、"...-X",(...)表示若干个空白符,当然X后可以是其他非数字字符
稍微调整程序结构可以,输入格式可以允许:"...X"