读书人

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

发布时间: 2012-09-23 10:28:11 作者: rapoo

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


}

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

读书人网 >编程

热点推荐