2-3 编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9,a~f,A~Z
#include <stdio.h> #include <math.h> #define MAXLENGTH 10 int getline(char s[], int max); int htoi(char s[]); int main(){ int len; char s[MAXLENGTH]; int i; for(i=0;i<MAXLENGTH;i++) s[i]=-1; len = getline(s,MAXLENGTH); int flag=0;//flag =1 表示符合十六进制的表示 for(i=1;i<len;i++) { if( (s[i]>='0'&& s[i]<='9')||(s[i]>='a'&& s[i]<='f')||(s[i]>='A'&& s[i]<='F')) flag=1; else flag=0; } int num; if(flag==0){ printf("not a hex\n"); return 0; } else num=htoi(s); printf("%d\n",num); return 0; } int getline(char s[], int max) { char c; for(int i=0; i<max && (c=getchar())!=EOF && c!='\n';i++) { s[i]=c; } return i; } int htoi(char s[]) { int length; int i; int num=0; for(i=0;s[i]!=-1;i++) {;} length=i; for(i=length-1;i>1;i--) { if(s[i]>='0'&& s[i]<='9') num+=(s[i]-'0')*pow(15,length-i-1); if(s[i]>='a'&& s[i]<='f') num+=(s[i]-'a'+10)*pow(15,length-i-1); if(s[i]>='A'&& s[i]<='F') num+=(s[i]-'A'+10)*pow(15,length-i-1); } return num; }