问题
对于一个长度小于20的字符串进行编码,遵循3个规则:
1,把字符串中的字母替换成它的第4个字母,例如,a>e,A>E,X>B,y>c,z>d
2,如果字符不是字母,忽略替换;
3,翻转整个字符串;
分析
整个过程分成两部分:替换字符和翻转字符串;其中替换字符还包括一个检查的操作,即检查是否是在字母表中的字符,也就是英文的26个字符。
代码
#include <iostream>
using namespace std;
char LowerCaseAlphabets[] ={
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char UpperCaseAlphabets[] ={
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char GetFourthChar(char chrSource,char alphabets[])
{
for(int i =0;i<26;i++)
{
if(alphabets[i] ==chrSource)
{
int index = (i+4)%26;
return alphabets[index];
}
}
return '\0';
}
void ReplaceChars(char chars[],int len)
{
for(int i =0;i<len;i++)
{
if('a'<=chars[i]&&chars[i] <='z')
{
chars[i]=GetFourthChar(chars[i],LowerCaseAlphabets);
}
else if('A'<=chars[i]&&chars[i]<='Z')
{
chars[i] =GetFourthChar(chars[i],UpperCaseAlphabets);
}
}
}
void ReverseString(char str[],int len)
{
int begin =0,end = len-1;
if(str[end] =='\0')
end--;
char hold;
while(begin<end)
{
hold = str[begin];
str[begin]=str[end];
str[end] = hold;
begin++;
end--;
}
}
void EncodeString(char str[],int len)
{
ReplaceChars(str,len);
ReverseString(str,len);
}
int main()
{
char hello[] ="hash11H";
EncodeString(hello,strlen(hello));
cout<<hello<<endl;
return 0;
}