-
题目描述:
-
一个二进制数,将其每一位取反,称之为这个数的反码。下面我们定义一个字符的反码。如果这是一个小写字符,则它和字符'a’的距离与它的反码和字符'z’的距离相同;如果是一个大写字符,则它和字符'A’的距离与它的反码和字符'Z’的距离相同;如果不是上面两种情况,它的反码就是它自身。
举几个例子,'a’的反码是'z’;'c’的反码是'x’;'W’的反码是'D’;'1’的反码还是'1’;'$'的反码还是'$'。
一个字符串的反码定义为其所有字符的反码。我们的任务就是计算出给定字符串的反码。
-
输入:
-
输入每行都是一个字符串,字符串长度不超过 80 个字符。如果输入只有!,表示输入结束,不需要处理。
-
输出:
-
对于输入的每个字符串,输出其反码,每个数据占一行。
-
样例输入:
-
Hello JLU-CCST-2011 !
-
样例输出:
-
Svool QOF-XXHG-2011
-
答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7828-1-1.html
错误1:
#include<stdio.h>
int main()
{
char str[81];
while(scanf("%s",str) != EOF)
{
int n = 0,i;
if(str[0] == '!')
{
return 0;
}
else
{
n = strlen(str);
for(i = 0; i < n; i++)
{
if(str[i] >= 'a' && str[i] <= 'z')
{
int l = str[i] - 'a';
int r = 'z' - str[i];
if(l < r)
printf("%c",'z'-l);
else
if(l > r)
printf("%c",'a' + r);
}
else if(str[i] >= 'A' && str[i] <= 'Z')
{
int l = str[i] - 'A';
int r = 'Z' - str[i];
if(l < r)
printf("%c",'Z'-l);
else
if(l > r)
printf("%c",'A' + r);
}
else
printf("%c",str[i]);
}
printf("\n");
}
}
}
忽略输入中含有空格字符!应该用gets替换scanf
gets(s)函数与
scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入
字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
错误2:
#include<stdio.h>
int main()
{
char str[81];
while(gets(str) != EOF)
{
int n = 0,i;
if(str[0] == '!')
{
return 0;
}
else
{
n = strlen(str);
for(i = 0; i < n; i++)
{
if(str[i] >= 'a' && str[i] <= 'z')
{
int l = str[i] - 'a';
int r = 'z' - str[i];
if(l < r)
printf("%c",'z'-l);
else
if(l > r)
printf("%c",'a' + r);
}
else if(str[i] >= 'A' && str[i] <= 'Z')
{
int l = str[i] - 'A';
int r = 'Z' - str[i];
if(l < r)
printf("%c",'Z'-l);
else
if(l > r)
printf("%c",'A' + r);
}
else
printf("%c",str[i]);
}
printf("\n");
}
}
return 0;
}
上面两段代码都忽略以!开头,但并不是单个字符的情况,这样并不是结束标志!
正确:
#include<stdio.h>
int main()
{
char str[81];
while(gets(str) != EOF)
{
int n = 0,i;
if(str[0] == '!' && strlen(str) == 1)
{
return 0;
}
else
{
n = strlen(str);
for(i = 0; i < n; i++)
{
if(str[i] >= 'a' && str[i] <= 'z')
{
int l = str[i] - 'a';
int r = 'z' - str[i];
if(l < r)
printf("%c",'z'-l);
else
if(l > r)
printf("%c",'a' + r);
}
else if(str[i] >= 'A' && str[i] <= 'Z')
{
int l = str[i] - 'A';
int r = 'Z' - str[i];
if(l < r)
printf("%c",'Z'-l);
else
if(l > r)
printf("%c",'A' + r);
}
else
printf("%c",str[i]);
}
printf("\n");
}
}
return 0;
}
看他人代码发现逗号运算符的应用
while(gets(a),strcmp(a,"!"))
{
}