廣州百田筆試題(武大專場)

其中一道題是輸入一組十六進制數,其中大寫字母ABCDEF,數字「1~9」,字符串類型爲string。其中把十六進制數轉化爲二進制數。好比「3A」。輸出結果爲00111010。題目不難,惋惜由於字符串類型爲string,當時一時寫代碼時產生諸多錯誤。索性此次將string字符串與char字符作一個總結。題目不難,可是細節挺重要的。函數

#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;
}
相關文章
相關標籤/搜索