洛谷P1914题解——(本地测试AC但是交题爆零全WA)使用getchar();
本题最大的坑在于:windows环境下的换行符为\r\n,linux环境的换行符为\n.我们再来看看洛谷的部分OJ判题机数据和机制常见“我在本地/xxOJ AC了、洛谷却不过”的原因Linux中换行符是’\n’而Windows中是’\r\n’(多一个字符),有些数据在Windows中生成,而在洛谷评测机Linux环境下评测。这种情况在字符串输入中非常常见。来源帮助-洛谷所以我们要用...
·
本题最大的坑在于:
windows环境下的换行符为\r\n,linux环境的换行符为\n.
我们再来看看洛谷的部分OJ判题机数据和机制
常见“我在本地/xxOJ AC了、洛谷却不过”的原因
Linux中换行符是’\n’而Windows中是’\r\n’(多一个字符),有些数据在Windows中生成,而在洛谷评测机Linux环境下评测。这种情况在字符串输入中非常常见。
来源帮助-洛谷
所以我们要用
ch=getchar();
while(ch=='\r'&&ch=='\n')
ch=getchar();
来确保自己读取的不是换行符或者云云。
接下来是其他一些小坑的解析和具体代码
可以选择观看
- 因为char类型上限为127,‘z’=122,所以很容易爆掉char,
我这里采用的解决方法是先转化为大写字母,然后输出时再转化为小写字母。 - z+1=a,注意这个loop
- 判题机输入字符串时不会有回车
可以AC了
#include<iostream>
#include<ctype.h>
using namespace std;
int main(void) {
char ch;
int n;
cin >> n;
//不是很支持cin,cout和printf,scnaf混用,这在有的OJ(如POJ)上会报错,请各位注意。
ch = getchar();
while (ch == '\r'||ch=='\n') {
ch = getchar();
}//吸掉换行
while (isalpha(ch))//结束表示
{
ch = toupper(ch) + n;
if (ch > 'Z')
{
ch -= 26;
}
printf("%c", tolower(ch));
ch = getchar();
}
return 0;
}
更多推荐
已为社区贡献1条内容
所有评论(0)