習題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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM