首页 > 其他 > 详细

广州百田笔试题(武大专场)

时间:2014-03-30 14:43:42      阅读:508      评论:0      收藏:0      [点我收藏+]

其中一道题是输入一组十六进制数,其中大写字母ABCDEF,数字“1~9”,字符串类型为string。其中把十六进制数转化为二进制数。比如“3A”。输出结果为00111010。题目不难,可惜因为字符串类型为string,当时一时写代码时产生诸多错误。索性这次将string字符串与char字符做一个总结。题目不难,但是细节挺重要的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <string>
#include <sstream>
using namespace std;
#include "IntToString.h"
string StingToBin(string s)
{
          string Sbin             /*(s.length())*/;
      Sbin.resize(200);       //因为是String类型,所以需要用这个函数开辟空间大小
          int  k = 1;            
      for(int i=0;i < s.length();i++)
      {
               if(s[i]>‘0‘&&s[i]<‘9‘)  
           {
                 int q = int(s[i])-48;         //s[i]为char类型,int类型强转之后是ASCII码。所以要减去48,将char型的数字转化为int型的数字
             int p = 1;                    //p值用于定位,因为一个16进制对应4个二进制数值
             while(q/2+1&&p<=4)     
             {
                           Sbin[4*k-p] = char(q%2+48);  //k值用于表示是第几个十六进制值,加上48同样是将int型的数字转化为char型的数字
               q = q/2;                     //转化为二进制
               p++;                        
             }
              
           }
         else                                   //考虑到十六进制的“A"~"F"
         {
           switch(s[i]-‘A‘)
           {
           case 0:  memcpy(&Sbin[4*k-4],"1010",4);break
                   case 1:  memcpy(&Sbin[4*k-4],"1011",4);break;
           case 2:  memcpy(&Sbin[4*k-4],"1100",4);break;
           case 3:  memcpy(&Sbin[4*k-4],"1101",4);break;
           case 4:  memcpy(&Sbin[4*k-4],"1110",4);break;
           case 5:  memcpy(&Sbin[4*k-4],"1111",4);break;
           }
         }
           k++;
      }
          /*Sbin[s.length()] = ‘\0‘;*/
      return Sbin;
}

  

广州百田笔试题(武大专场),布布扣,bubuko.com

广州百田笔试题(武大专场)

原文:http://www.cnblogs.com/Su-30MKK/p/3583484.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!