腾讯 linux 面试题,腾讯面试题+答案

// Test.cpp : 定义控制台应用程序的入口点。

//题目描述如注释所示。

#include "stdafx.h"

//在一篇英文文章中查找指定的人名,人名使用二十六个英文字母(可以是大写或小写)、空格以及两个通配符组成(*、?),通配符“*”表示零个或多个任意字母,通配符“?”表示一个任意字母。

//如:“J* Smi??” 可以匹配“John Smith” .

//

//请用C语言实现如下函数:

//void scan(const char* pszText, const char* pszName);

//注:pszText为整个文章字符,pszName为要求匹配的英文名。

//请完成些函数实现输出所有匹配的英文名,除了printf外,不能用第三方的库函数等。

const char *pszTest="John Smithh";

const char *pszName="J* Smi??";

void scan(const char* pszText, const char* pszName){

int flag=0;//下一次匹配的起始位置。

int i=0;

int j=0;

while(i

if(i>=strlen(pszTest)){

printf("匹配失败");

return;

}

if(j>=strlen(pszName)){

printf("匹配成功");

j=0;

return;

}

if(pszTest[i]==pszName[j]||pszName[j]=='?'){

//如果相等或者pszName中是通配符‘?’时,都认为是匹配成功,继续匹配;

i++;

j++;

continue;

}

if(pszName[j]=='*'){

j++;//跳过‘*’,继续匹配直到下一个字符匹配上为止

while(pszTest[i++]!=pszName[j]&&i

j++;//找到匹配的字符之后,j也向后移动一位。

continue;

}

j=0;//匹配失败,子串重新开始匹配。

flag++;

i=flag;//匹配失败,目标串返回flag指定的位置。

}

//用于两个字符串都恰好匹配完的情况!

printf("匹配成功!");

}

int _tmain(int argc, _TCHAR* argv[])

{

scan(pszTest,pszName);

return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值