之前看到一个面试题目:
将字符串转换成整型数字,当时一想有点没头绪,没办法自己学的太烂了,还不具备编程思想,算法也是一塌糊涂。今天写了下程序,特在这里记录下:
/**********************
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"