关闭

两道面试题

872人阅读 评论(0) 收藏 举报

第一道,比较经典,用代码实现strstr()的功能.

#include <iostream>
using namespace std;
char* findasub(char str1[],int len1,char str2[], int len2)
{
 if (len2>len1)return NULL;
 
 int j=0;
    int i=0;
 
 for (;j<len2;j++)
  for (;i<len1;i++)
  {
   if (str2[j]==str1[i])j++; //当有一个字符匹配时,子串后移一位.
   else j=0;     //任何一次两字符不等时,都要从头匹配.
  
   if (j==len2)              //匹配成功.这里之所以用len2而不用len2-1是因为
   {        //j==len2-1 j还会自增一次.
    int len=len1-i+len2;
    char*str=new char[len];
    for (int k=0;k<len;k++)str[k]=str1[k+i-len2+1];
    return str;
    break;
   }
  
  }
 
  if(j!=len2-1) return NULL;//匹配失败.
 
  return NULL;
}

int main(void)
{
 char str1[]="femalelover is a good man";
 char str2[]="lover";
 char* fn=findasub(str1,strlen(str1),str2,strlen(str2));
 if(fn)
 {
  cout<<fn<<endl;
  delete fn;
 }
 return 0;
}


第二道:用STL接受输入的整数,当输入不是整数时,输出排序后的所有整数:
#include <list>
#include <iostream>
#include <algorithm>
using namespace std;
void main()
{
 list<int>mylist;
 list<int>::iterator myit;
 double test=0;                    //这里必须用double,虽然我们要的是int
 int wathch=0;
 bool isint=true;

 while (isint)
 {
  cin>>test;
  if (test==int(test))      //这里判断一个数是否整数. 如果上面用int,则这里会死循环.
  {
   mylist.push_back(test);
   wathch++;
  }
  else isint=false;
 }
 if (mylist.size()==0)
 {
  cout<<"The list is empty/n";
  return;
 }
 else
 {
  mylist.sort();
 
  for (myit=mylist.begin();myit!=mylist.end();myit++)
   cout<<*myit<<endl;
 }

}

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:61355次
    • 积分:808
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:3篇
    • 译文:0篇
    • 评论:23条
    文章分类
    最新评论