新东西 %[^\n]
这个题测试的时候不知道哪里为什么一直错一个。
int main()
{
char a[81] = { 0 };
fgets(a, 80, stdin);
int i = 0;
int n = strlen(a);
for(i=0;i<n;i++)
{
if ((a[i] >= 'a' && a[i] <= 'y') || (a[i] >= 'A' && a[i] <= 'Y'))
a[i] += 1;
else if (a[i] == 'z')
a[i] = 'a';
else if (a[i] == 'Z')
a[i] = 'A';
}
puts(a);
return 0;
}
这个题就提到了我上次提到的,对于这种周期性循环,可以用模求余的方式控制,
那个加21 实际上是-5+26,为了保证A~E的对应正确。
int main()
{
char a[201] = { 0 };
gets(a);
int i = 0;
int n = strlen(a);
for (i = 0; i < n; i++)
{
if(a[i]>='A'&&a[i]<='Z')
a[i] = (a[i] - 'A' + 21) % 26 + 'A';
}
puts(a);
return 0;
}
信息有点多,今天写的还是比较麻烦的,就是分别实现每个要求,然后最后打印
#include<string.h>
int main()
{
char a[101] = { 0 }, b[101] = { 0 }, c[101] = { 0 };
scanf("%s %s %s", a, b, c);
int na = strlen(a), nc = strlen(c);
char d[26] = { 0 };
int i = 0;
for (i = 0; i < na; i++)
{
for(int j=0;j<26;j++)
{
if (b[i] == j + 'A')
{
d[j]++; break;
}
}
}
//第二个条件
for(i=0;i<26;i++)
{
if (d[i] == 0)
{
printf("Failed\n"); return 0;
}
}
char m = 0;
for (i = 0; i < na; i++)
{
int flag = 0;
m = a[i];
char x = 0;
for (int j = 0; j < na; j++)
{
if (a[j] == m && x != b[j])
{
x = b[j];
flag++;
}
}
if (flag > 1)
{
printf("Failed\n"); return 0;
}
}
for (i = 0; i < na; i++)
{
int flag = 0;
m = b[i];
char x = 0;
for (int j = 0; j < na; j++)
{
if (b[j] == m && x != a[j])
{
x = a[j];
flag++;
}
}
if (flag > 1)
{
printf("Failed\n"); return 0;
}
}
for (i = 0; i < nc; i++)
{
for (int j = 0; j < na; j++)
{
if (c[i] == a[j])
{
c[i] = b[j]; break;
}
}
}
puts(c);
return 0;
}