shadowest @ 2019-04-10 00:45:39
#include<stdio.h>
int main(void)
{
int n;
int i = 0;
int p;
char word[100];
char key[100];
scanf("%d", &n);
p = n;
getchar();
while ((word[i] = getchar()) != '\n')
i++;
for (int m = 0; m < i; m++)
{
if (word[m] + n <= 'z')
key[m] = word[m] + n;
else
{
while (word[m] + p > 'z')
{
p = p - 26;
}
key[m] = word[m] + p;
}
p = n;
}
for (int a = 0; a< i; a++)
{
printf("%c", key[a]);
}
return 0;
}
by ddwqwq @ 2019-04-10 02:33:24
虽然VS很强,但它还没有聪明到足以自动查错的地步呀QwQ
by LoctStrider @ 2019-04-10 07:03:33
虽然 VS 很强,但它还没有聪明到足以和 GNU GCC 编译效果完全一样啊
为防止换行符的问题(Windows 与 Unix 系的差别),最好用 scanf("%s", str)
的形式输入字符串,用 <string.h>
中的 strlen(str)
获取字符串长度。
比如把代码写成这样:
int n, len;
char li[55];
scanf("%d%d", &n, li + 1);
len = strlen(li + 1);
for (int i = 1; i <= len; ++i)
// do something
这样写对于平台差异的容错性更好。
(另:直接在输入后执行 n %= 26
会好写不少啊……最多只会减一次 26)
by LoctStrider @ 2019-04-10 07:05:37
上面打错了……
scanf("%d%s", &n, li + 1);
by shadowest @ 2019-04-10 12:50:15
@LKC314
谢谢大佬,改成你说的那样我就过了
一开始我用
while (getchar() != '\n')
continue;
消除换行符的影响,结果直接五个RE了,真的奇奇怪怪.....
by whhsteven @ 2019-07-14 18:27:29
我在Linux(Ubuntu 16.04 LTS)下写的代码,终端运行好像也还没什么问题,为什么交到洛谷这儿就5个WA了?
据我所知洛谷用的Linux。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
string src;
string rst;
getline(cin,src);
n %= 26;
for(int i=0;i<(int)src.length();i++)
{
if(src[i] + n > 'z') rst[i] = src[i] + n - 26;
else rst[i] = src[i] + n;
}
for(int i=0;i<(int)src.length();i++) cout << rst[i];
return 0;
}
by whhsteven @ 2019-07-14 18:34:28
@shadowest
对了,你是怎么配置VS的?我想用VS写C好像从来没有成功过。
现在用VS写C++好像还挺爽的~