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


    其中一道题是输入一组十六进制数,其中大写字母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()] = '';*/
    	  return Sbin;
    }
    

      

  • 相关阅读:
    类加载器
    hibernate笔记
    windows笔记
    maven笔记
    mysql笔记
    jsonp使用
    [ZJU 1010] Area
    [ZJU 1004] Anagrams by Stack
    [ZJU 1003] Crashing Balloon
    [ZJU 1002] Fire Net
  • 原文地址:https://www.cnblogs.com/Su-30MKK/p/3583484.html
Copyright © 2020-2023  润新知