现在的位置: 首页 > 综合 > 正文

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

2013年10月03日 ⁄ 综合 ⁄ 共 1656字 ⁄ 字号 评论关闭

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


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

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

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

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

#include "stdafx.h"
#include <stdio.h>
#include <string>
#include<iostream>
#include <stdlib.h>
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--;
      // 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";//注意这个地方,如果这样定义的话,可以实现吗?这样是不行因为这样定义的是常量字符串。会出现问题。应该定义为数组! char a[]="I am a Student"
	cout<<"a:a::"<<a<<endl;
	char *b=ReverseSentence(a);
	printf("%s",b);
}

上述问题的基本思想就是:先将整个句子逆序,然后在遇到空格的时候,对每个单词再次逆序,就行了!

抱歉!评论已关闭.