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;
}
本文介绍了一个C语言函数htoi(),该函数能够将含有十六进制数字的字符串转换成对应的整数值。文章提供了完整的代码实现,并通过示例演示了如何判断输入字符串是否符合十六进制规范。

被折叠的 条评论
为什么被折叠?



