pomoke @ 2017-08-15 13:30:50
#include <stdio.h>
#include <string.h>
#pragma message("Hello!")
int main(void)
{
long int n;
char passwd[105],*ptr;
scanf("%ld %s",&n,passwd);
n%=26;
//To passwd,Z:123
ptr=passwd;
while(*ptr!='\0')
{
*ptr=*ptr-96+n;
if (*ptr>26) *ptr-=26;
*ptr+=96;
ptr++;
}
printf("%s\n",passwd);
return 0;
}
by sochiji @ 2017-08-16 01:11:10
'z'的ASCII是122,标准ASCII的上限是127。
如果尝试计算'z'后面超过5号的字符就会产生错误。
必须先判断越界情况。
#include <iostream>
#include <string>
using namespace std;
int main()
{
long t;
string s;
cin >> t;
t %= 26; //这一行是不是有点多余
cin.get(); //换行读取
cin >> s;
for (unsigned long i = 0; i <= s.length()-1; i++) //对s的每一位操作
{
if ('z' - s[i] >= t) //判断
s[i] += t;
else
s[i] += t - 26; //把s[i]控制在小写字母的区域内
}
cout << s;
}
以上代码C++11,全部测试点满分。
by kissinger @ 2017-08-24 13:14:41
unsigned char就不会溢出了
by ybwowen @ 2017-08-26 09:46:29
你碰到z+1变为a会死啊?
by awask @ 2017-09-13 20:28:57
aaaaaaaaaaaaaaaaaaaa