- UID
- 62930
注册时间2009-7-24
阅读权限20
最后登录1970-1-1
以武会友
TA的每日心情 | 开心 2024-12-6 17:12 |
---|
签到天数: 6 天 [LV.2]偶尔看看I
|
/******************************************************************************
* Copyright (c) 2009, 黄奇 ,All right reserved.
*
* 文 件 名: atoi.c
*
* 功能描述: 字符串转成整型,支持36进制(十个数字加26个英文字母)
*
* 创 建 人: 黄奇, 2009年 7月29日
*
* 创建日期: 2009.7.29
*
* 版 本 号: 1.0
*
* 修改记录:
*
* 编绎环境:Windows XP SP2、 VC 6.0 sp6
*
*******************************************************************************/
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
// 待转换字符串,nBase基数
int my_atoi(char *szStr, int nBase)
{
int num ,
result;
num = result = 0 ;
if (nBase < 0 || nBase > 36)
{
// stderr: 标准错误输出
fprintf(stderr, "Base error!\r\n") ;
return 0 ;
}
// 判断字符串是否结束且是否合法
while (0 != *szStr && isalnum(*szStr))
{
// isalnum: 判断字符是不是数字或英文字母
if (isalnum(*szStr))
{
// islower: 判断是不是小写字母
if (islower(*szStr))
{
result = result * nBase + (*szStr - 'a' + 10) ;
}
// isupper: 判断是不是大写字母
else if (isupper(*szStr))
{
result = result * nBase + (*szStr - 'A' + 10) ;
}
else
{
result = result * nBase + (*szStr - '0') ;
}
}
++szStr ;
}
return result ;
}
int main(void)
{
char szStr[20] ;
int nBase ;
while (scanf ("%s%d", szStr, &nBase) > 0 && nBase != 0 && szStr[0] != '0')
{
printf("%d\r\n", my_atoi(szStr, nBase)) ;
}
return 0 ;
}
[ 本帖最后由 evilknight 于 2009-7-29 21:35 编辑 ] |
|