计算机笔试和面试最常考察的就是字符串的各种操作。字符串处理是我们程序员日常工作最常遇到的问题,能够体现程序员的基本功。下面我就最近一个月以来的各种笔试和面试遇到的有关字符串处理的题目和大家分享一下:
1、google笔试:编码实现求给定字符串(全为小写英文字母)的最小后继,如"abc"的最小后继为"abd","dhz"的最小后继为"di"。
思路:题目比较简单,对最后一个字符+1,如果大于'z'则对前一个字符+1,如果又是大于 'z' 则重复之前步骤。所以写代码时,我们只要对字符串循环从后往前对每一个字符进行+1,直到出现+1后不超过'z'为止。如果退出循环时第一个字符大于于'z'则提示不存在,否则把退出循环的字符的后一位置为' '即可。
int MinNextStr(const char* src,char* &minnext) { int srclen=strlen(src); minnext=(char*)malloc((srclen+1)*sizeof(char)); if(minnext==NULL) { return -1; } strcpy(minnext,src); int i=srclen-1; while(i>=0) { minnext[i]++; if(minnext[i]如果把给定字符串全为小写英文字母改为大小写英文字母,则只要把if(minnext[i]'a'||minnext[i]
注意minnext[i]'a'是为了防止minnext[i]为大写的情况,因为大写英文字母(A:65)比小写(a:97)的ASCII 码小,如果不加minnext[i]>'a'则minnext[i]为('Z'+1,ASCII 码:91)也会跳出循环。
2、中兴:编码实现字符串右移n位,如"diopHeg"右移2位为"egdiopH"
思路1:只要把需要移动的最后n个字符保存下来,把前面剩下的全部后移n个位置,最后把开始保存好的n 个字符填充到前面n个位置。注意:n超过字符串长度的情况,所以事前先做n mod 字符串的长度。
int RightMoveStr(char* src,int n) { int len=strlen(src); int mov=n%len; char* rstr=(char*)malloc((mov+1)*sizeof(char)); if(rstr==NULL) { return 0; } int i=0; while(i