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

在程序员面试的过程当中,很多时候都会问到对字符串的操作,其中包括:字符串的逆序,字符串的最大字串,字符串按单词逆序,两个字符串的最大公共子串,记录字符串中某字符出现的次数,对字符串进行去重,找出第一个不重复的字符,字符串中是否含有回文字串,最长回文字串等等很多的问题。还有一些就是实现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 <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--; 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::"<<a<<endl; cout<<"cc::"<<cc<<endl; char *b=ReverseSentence(a); printf("%s",b); }
上述问题的基本思想就是:先将整个句子逆序,然后在遇到空格的时候,对每个单词再次逆序,就行了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值