国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
2010筆面試專欄一:字符串

計算機筆試和面試最常考察的就是字符串的各種操作。字符串處理是我們程序員日常工作最常遇到的問題,能夠體現(xiàn)程序員的基本功。下面我就最近一個月以來的各種筆試和面試遇到的有關(guān)字符串處理的題目和大家分享一下:

1、google筆試:編碼實現(xiàn)求給定字符串(全為小寫英文字母)的最小后繼,如“abc”的最小后繼為

   “abd”,“dhz”的最小后繼為“di”。

思路:題目比較簡單,對最后一個字符+1,如果大于’z’則對前一個字符+1,如果又是大于 ’z’

        則重復之前步驟。所以寫代碼時,我們只要對字符串循環(huán)從后往前對每一個字符進行+1,直到

        出現(xiàn)+1后不超過’z’為止。如果退出循環(huán)時第一個字符大于于’z’則提示不存在,否則

        把退出循環(huán)的字符的后一位置為’\0’即可。

代碼:

   1:  int MinNextStr(const char* src,char* &minnext)
   2:  {
   3:      int srclen=strlen(src);
   4:      minnext=(char*)malloc((srclen+1)*sizeof(char));
   5:      if(minnext==NULL)
   6:      {
   7:          return -1;
   8:      }
   9:      strcpy(minnext,src);
  10:      int i=srclen-1;
  11:      while(i>=0)
  12:      {
  13:          minnext[i]++;
  14:          if(minnext[i]<='z')
  15:          {
  16:              break;
  17:          }
  18:          i--;
  19:      }
  20:      if(i<0)
  21:      {
  22:          return 0;
  23:      }
  24:      else
  25:      {
  26:          minnext[++i]='\0';
  27:          return 1;
  28:      }
  29:  }
 

     如果把給定字符串全為小寫英文字母改為大小寫英文字母,則只要把

       14: if(minnext[i]<='z') 改為 if(minnext[i]<='z'&&minnext[i]>'a'||minnext[i]<='Z')

注意minnext[i]<='z'&&minnext[i]>'a'是為了防止minnext[i]為大寫的情況,因為大寫英文字母(A:65)比小寫(a:97)的ASCII 碼小,如果不加minnext[i]>'a'則minnext[i]為(’Z’+1,ASCII 碼:91)也會跳出循環(huán)。

  

2、中興:編碼實現(xiàn)字符串右移n位,如“diopHeg”右移2位為“egdiopH”

思路1:只要把需要移動的最后n個字符保存下來,把前面剩下的全部后移n個位置,最后把開

          始保存好的n 個字符填充到前面n個位置。注意:n超過字符串長度的情況,所以

          前先做n mod 字符串的長度。

代碼:

   1:  int RightMoveStr(char* src,int n)
   2:  {
   3:      int len=strlen(src);
   4:      int mov=n%len;
   5:      char* rstr=(char*)malloc((mov+1)*sizeof(char));
   6:      if(rstr==NULL)
   7:      {
   8:          return 0;
   9:      }
  10:      int i=0;
  11:      while(i<mov)
  12:      {
  13:          rstr[i]=src[len-mov+i];
  14:          i++;
  15:      }
  16:      rstr[i]='\0';
  17:      i=len-mov-1;
  18:      while(i>=0)
  19:      {
  20:          src[i+mov]=src[i];
  21:          i--;
  22:      }
  23:      i=0;
  24:      while(i<mov)
  25:      {
  26:          src[i]=rstr[i];
  27:          i++;
  28:      }
  29:      free(rstr);
  30:      return 1;
  31:  }
  
思路2:使用字符串庫函數(shù)簡化編碼工作,用一個新的字符串ss保存結(jié)果,先把源字符串
         指針s移到需要右移的子串的第一個字符的位置,如“diopHeg”右移2位就把s移動
         到指向’e’,接著 strcpy(ss,s),把s所指位置賦值為’\0’,最后strcat(ss,s)。
代碼:
   1:  int RightMove(char* src,char* &ssrc,int n)
   2:  {
   3:      int len=strlen(src);
   4:      ssrc=(char*)malloc(sizeof(char)*(len+1));
   5:      n=n%len;
   6:      if(ssrc==NULL)
   7:      {
   8:          return 0;
   9:      }
  10:      int i=0;
  11:      char* s=src;
  12:      while(i<len-n)
  13:      {
  14:          s++;
  15:          i++;
  16:      }
  17:   
  18:      strcpy(ssrc,s);
  19:      *s='\0';
  20:      strcat(ssrc,src);
  21:      return 1;      
  22:  }

 

3、新郵通:字符串反轉(zhuǎn):給定字符串“we;tonight;you;”,編碼實現(xiàn)輸出“ew;thginot;uoy;”

思路:使用兩個變量first和end分別記錄當前需要反轉(zhuǎn)的子串的頭和尾字符的下標,每遇到’;’就把first

        和end之間的子串進行前后反轉(zhuǎn)。

代碼:

   1:  void ReverseStr(char *src)
   2:  {
   3:      int len=strlen(src);
   4:      int i=0;
   5:      int first=0;
   6:      int end=0;
   7:      while(i<len)
   8:      {
   9:          if(src[i]==';')
  10:          {
  11:              end=i-1;
  12:              while(first<end)
  13:              {
  14:                  char temp=src[first];
  15:                  src[first]=src[end];
  16:                  src[end]=temp;
  17:                  first++;
  18:                  end--;
  19:              }
  20:              first=i+1;
  21:          }
  22:          i++;
  23:      }
  24:  }

如果給定字符串結(jié)尾沒有’;’,如“we;tonight;you”,編碼實現(xiàn)輸出“ew;thginot;uoy”

只需要修改一下代碼9、10、11行:

        if(src[i]==';'||i==len-1){if(src[i]==';')end=i-1;elseend=i;

 

4、西艾:X86結(jié)構(gòu)下,下面代碼輸出結(jié)果是什么?

代碼:

   1:      char str[20]="Good night";
   2:      int* p=(int*)str;
   3:      p[0]=0x61626364;
   4:      p[1]=0x31323334;
   5:      p[2]=0x41424344;
   6:      cout<<str<<endl;

解題:考察知識點:

(1)int的內(nèi)存大?。?2bit=4byte;char的內(nèi)存大?。?bit=1byte;

(2)常用字符的ASCII 碼,’a’:97;’A’=65;’0’=48;

(3)十六進制轉(zhuǎn),0x61=97;

(4)大小端模式:

所謂的小端模式,是指數(shù)據(jù)的低位保存在內(nèi)存的低地址中,而數(shù)據(jù)的高位保存在內(nèi)存的高地址中,這種存儲模式將地址的高低和數(shù)據(jù)位權(quán)有效地結(jié)合起來,高地址部分權(quán)值高,低地址部分權(quán)值低,和我們的邏輯方法一致。

所謂的大端模式,是指數(shù)據(jù)的低位(就是權(quán)值較小的后面那幾位)保存在內(nèi)存的高地址中,而數(shù)據(jù)的高位,保存在內(nèi)存的低地址中,這樣的存儲模式有點兒類似于把數(shù)據(jù)當作字符串順序處理:地址由小向大增加,而數(shù)據(jù)從高位往低位放;

       而X86結(jié)構(gòu)為小端模式,所以

            p[0]=0x61626364;//97,98,99,100對應a,b,c,d,小端存在字符串str則為dcba
            p[1]=0x31323334;//同理4321
            p[2]=0x41424344;//同理DCBA

 

     代碼輸出:dcba4321DCBA

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
實現(xiàn)一些字符串操作標準庫函數(shù)
AVR GCC常用頭文件
C語言中的字符串截取函數(shù)及應用
小白VC++字符串截取總結(jié)
C語言 程序 字符串轉(zhuǎn)換成整型,整型轉(zhuǎn)換成字符串
字符串中查找字符(yc)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服