编写hoti(s),把由十六进制数字组成的字符串(0x或0X)转化为与之等价的整形值。字符串中允许包含的数字为:0-9,a-f或A-F。
2016-11-23 19:12
567 查看
#include <stdio.h> #include <stdlib.h> #include<windows.h> /* Here's a helper function to get me around the problem of not * having strchr */ //将字符c 传入函数,转化成相应的整形值,用到一个技巧。10+(i)/2,巧妙地将对应的大小写字母转换为同一个数。若为不符合条件字符返回0 int hexalpha_to_int(int c) { char hexalpha[] = "aAbBcCdDeEfF"; int i; int answer = 0; for (i = 0; answer == 0 && hexalpha[i] != '\0'; i++) { if (hexalpha[i] == c) { answer = 10 + (i / 2); } } return answer; } //返回无符号整形 //若十六进制的字符串包含前缀0x或0X先进行++处理 //按十六进制进行计算的时候结果的整形值用answer*=16+temp,temp(为说明思路标注的临时变量)为一个16进制的数 unsigned int htoi(const char s[]) { unsigned int answer = 0; int i = 0; int valid = 1; int hexit; if (s[i] == '0') { ++i; if (s[i] == 'x' || s[i] == 'X') { ++i; } } while (valid && s[i] != '\0') { answer = answer * 16; if (s[i] >= '0' && s[i] <= '9') { answer = answer + (s[i] - '0'); } else { hexit = hexalpha_to_int(s[i]); if (hexit == 0) { valid = 0; } else { answer = answer + hexit; } } ++i; } if (!valid) { answer = 0; } return answer; } /* Solution finished. This bit's just a test driver, so * I've relaxed the rules on what's allowed. */ //测试程序 //strtoul函数将字符串转化为无符号长整形数 //验证打印(*endp != '\0' && result == 0) || result == check)正确打印条件 int main(void) { char *endp = NULL; char *test[] = { "F00", "bar", "0100", "0x1", "0XA", "0X0C0BE", "abcdef", "123456", "0x123456", "deadbeef", "zog_c" }; unsigned int result; unsigned int check; size_t numtests = sizeof test / sizeof test[0]; size_t thistest; for (thistest = 0; thistest < numtests; thistest++) { result = htoi(test[thistest]); check = (unsigned int)strtoul(test[thistest], &endp, 16); if ((*endp != '\0' && result == 0) || result == check) { printf("Testing %s. Correct. %u\n", test[thistest], result); } else { printf("Testing %s. Incorrect. %u\n", test[thistest], result); } } system("pause"); return 0; }
//全部正确
相关文章推荐
- 练习 2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀 0x 或 0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f 以及 A~F。
- 练习 2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀 0x 或 0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f 以及 A~F。
- 练习2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x 或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f以及A~F。
- 练习2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f以及A~F。
- 练习2-3 编写函数htoi(s),把由16进制数字组成的字符串(包含可选的前缀0X或0x)转换成与之等价的整形值。字符串中允许包含的数字包括:0 ~ 9, a ~ f,A ~ F。
- 练习2-3:十六进制数字字符串转换为等价整型值,字符串允许包含的数字包括:0~9、a~f、A~F、x、X(C程序设计语言 第2版)
- 将由16进制数字组成的字符串转换成与之等价的整形值
- 字符串包含一个或多个数字,编写函数把数字字符转化为整数并返回这个整数。如果字符串包含任何非数字字符,函数就返回零。
- 将由16进制数字组成的字符串转换成与之等价的整形值
- 把由十六进制数字组成的字符串转换为与之等价的整数值
- 面试题七 C/C++ 两个字符串由数字组成的相加,最大不超过32bit整形的系统函数--程序员面试题
- 编写函数htio(s),把由16进制数字组成的字符串转换为与之等价的整数值
- 【C语言】为下面的函数原型编写函数定义: int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- 实现将一个字符串转化成对应的整形数字
- 给定一个整数,把整数中包含的每一个数字放到一个数组中(不要把数字转化为字符串处理)
- 编写Socket客户端和服务器程序,客户端发送一个包含多个数字的字符串给服务器,服务器排序后返回给客户端,要求服务器能连续不断地服务。
- 开源polarssl加密库使用详解之一:十六进制字符串转化为十六进制数字
- java中怎么将由数字组成的字符串转化为数组?
- Android入门——数字组成的字符串转化为货币格式
- java十六进制字符串 转化为整形