习题7-8 字符串转换成十进制整数

 1 #include<stdio.h>
 2 
 3 int is_hex(char ch);            //判断是否是十六进制字符,是返回1
 4 int hex_to_dec(char ch);        //十六进制字符转换位十进制数
 5 int main(void)
 6 {
 7     char a[80], b[80];
 8 
 9     int i = 0;
10     while ((a[i] = getchar()) != '#')
11     {
12         i++;
13     }
14         
15     int j = 0;
16     int count = 0;                //十六进制字符的个数
17     int first_hex = -1;            //第一个十六进制字符的下标            
18     for (i = 0; a[i] != '#'; i++)
19     {
20         if (is_hex(a[i]))
21         {
22             count++;
23             if (count == 1)
24             {
25                 first_hex = i;
26             }
27             b[j] = a[i];
28             j++;
29         }
30     }
31 
32     int flag = 1;                //等于-1时,表示负数
33     for (i = 0; i < first_hex; i++)
34     {
35         if (a[i] == '-')
36         {
37             flag = -1;
38         }
39     }
40 
41     int num = 0;
42     for (i = 0; i < j; i++)
43     {
44         num = num * 16 + hex_to_dec(b[i]);
45     }
46 
47     num = flag * num;
48     printf("%d", num);
49 
50     return 0;
51 }
52 int is_hex(char ch)
53 {
54     int ret = 0;
55     if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f'))
56     {
57         ret = 1;
58     }
59 
60     return ret;
61 }
62 int hex_to_dec(char ch)
63 {
64     int ret = 0;
65     if (ch >= '0' && ch <= '9')
66     {
67         ret = ch - '0';
68     }
69     else if (ch >= 'A' && ch <= 'F')
70     {
71         ret = 10 + ch - 'A';
72     }
73     else if (ch >= 'a' && ch <= 'f')
74     {
75         ret = 10 + ch - 'a';
76     }
77 
78     return ret;
79 }

 

posted @ 2019-12-09 15:15  jason2018  阅读(2115)  评论(0编辑  收藏  举报