首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-09-23 
2012年校园招聘华为一道面试题---之我的解法1)将一个字符串中的小写字母变成大写的,如果是大写的则保持不

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';


}

 

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

 

热点排行