2012年校园招聘华为一道面试题---之我的解法

1)将一个字符串中的小写字母变成大写的,如果是大写的则保持不变。如果是字母之外的符号如“,”、“?”等,则去掉这些符号。原型给定void Str_toupper(const char *pIn, char *pOut)。

 

解决:

void Str_toupper(const char *pIn, char *pOut)
{

 unsigned int out_len=0;


 if((pIn==NULL)||(pOut==NULL))
 {
  return;
 }

 
 while(*pIn!='\0')
 {

    if(((*pIn)<='z')&&((*pIn)>='a'))
    {
     pOut[out_len]=(*pIn)-'a'+'A';
     out_len++;

    }else if(((*pIn)<='Z')&&((*pIn)>='A'))
    {
     pOut[out_len]=(*pIn);
     out_len++;
    }
    pIn++;
   
 }

 pOut[out_len]='\0';

}

 

其实如果小写转化成大写的话,STL string里面可以调用泛型算法:

#include <string>
#include <algorithm>

using namespace std;

 

char IN[20]="abcde78?fAZ";
 char *Out=(char *)malloc(strlen(IN)+1);

 std::string s(IN,strlen(IN)+1);

 transform(s.begin(), s.end(), s.begin(), toupper);

 printf("s is%s\n",s);

 

但是STL不能去掉不是a-z A-Z外的字符;

 

(2)将字符串中的每一个字符,变成他的下一个字符。大小写不变,如果是z就改成a,如果是Z改成A),其它字符不变,比如,输入为abcf,输出应为bcdg。

void ChangeLetter(const char *pInStr, char *pOutStr)
{

 if((pInStr==NULL)||(pOutStr==NULL))
 {
  return;
 }
 
 for (unsigned int i=0;i<strlen(pInStr);i++)
 {
  if((pInStr[i]<'z'&&pInStr[i]>='a')||(pInStr[i]<'Z'&&pInStr[i]>='A'))
  {
   pOutStr[i]=pInStr[i]+1;

  }else if(pInStr[i]=='z')
  {
   pOutStr[i]='a';

  }else if(pInStr[i]=='Z')
  {
   pOutStr[i]='A';

  }
 }

 pOutStr[strlen(pInStr)]='\0';


}

 

大家对这两道面试题有更好的解决办法,欢迎留言交流!

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值