程序员笔试题----字符串的操作

在程序员面试的过程当中,很多时候都会问到对字符串的操作,其中包括:字符串的逆序,字符串的最大字串,字符串按单词逆序,两个字符串的最大公共子串,记录字符串中某字符出现的次数,对字符串进行去重,找出第一个不重复的字符,字符串中是否含有回文字串,最长回文字串等等很多的问题。还有一些就是实现strcpy函数,memcpy函数,这个针对字符串的问题在面试过程中真的是千奇百怪,什么类型的都有。当然相对来说比较好做,但是当遇到一些限定条件之后就相对会难一些了,比如说空间,时间的限制。


今天我们先来看下这样一道题:就是书写strcpy的源代码:

char * strcpy(char *dest,char *src) { char *d=dest;// 这个地方也要注意下 if(src==NULL) { return NULL; } while(*src!='\0') { *dest=*src; dest++; src++; } *dest='\0';// 还有这里 return d;/ /最后返回的是d }


上面的这个写法,基本可行了!大家如果有更好的方法可以留言哦!大家共同学习!

下面我们来看下字符串逆序中,句子逆序,但是单词不逆序的问题:

#include "stdafx.h" #include #include #include #include using namespace std; void Reverse(char *pBegin, char *pEnd) { if(pBegin == NULL || pEnd == NULL) return; while(pBegin < pEnd) { char temp = *pBegin; *pBegin = *pEnd; *pEnd = temp; pBegin ++; pEnd --; } } /////////////////////////////////////////////////////////////////////// // Reverse the word order in a sentence, but maintain the character // order inside a word // Input: pData - the sentence to be reversed /////////////////////////////////////////////////////////////////////// char * ReverseSentence(char *pData) { if(pData == NULL) return NULL; char *pBegin = pData; char *pEnd = pData; while(*pEnd != '\0') pEnd ++; pEnd--; pEnd--; // Reverse the whole sentence Reverse(pBegin, pEnd); // Reverse every word in the sentence pBegin = pEnd = pData; while(*pBegin != '\0') { if(*pBegin == ' ') { pBegin ++; pEnd ++; continue; } // A word is between with pBegin and pEnd, reverse it else if(*pEnd == ' ' || *pEnd == '\0') { Reverse(pBegin, --pEnd); pBegin = ++(++pEnd); } else { pEnd ++; } } return pData; } void main() { char *a="I am a Student"; string cc="U r a student too"; cout<<"a:a::"< 上述问题的基本思想就是:先将整个句子逆序,然后在遇到空格的时候,对每个单词再次逆序,就行了!

你可能感兴趣的:(程序员笔试题----字符串的操作)