1. 加密方法是正确的。
2. 输出格式不符合要求。题目要求输入N个名字之后再一次性输出所有加密后的名字,而程序中是输入一个名字后立即输出一个加密的名字。
3. 建议:一次性读取一个字符串,再用加密函数进行处理。
不知道是不是这个原因。
#include
#include
#include
int main()
{
int i = 0,j = 0,n = 0,spc = 0;
char str[25][80];
scanf("%d",&n);
fflush(stdin);
if ( n >= 25 )
{
printf("25个字符串以内");
return 0;
}
for(j=0;j
char c = 0;
i = 0;
while ( true )
{
c = getchar();
if ( '\n' == c )
{
str[j][i] = '\0';
break;
}
str[j][i] = c;
i++;
}
}
for ( j = 0 ; j < n ; j++ )
{
i = 0;
spc = 0;
for ( unsigned int i = 0 ; i < strlen(str[j]) ; i++ )
{
int tmpC = str[j][i];
if ( tmpC >= 'a' && tmpC <= 'z' )
{
tmpC += ( i * 2 - spc * 2 );
tmpC = 'a' + ( tmpC - 'a' ) % 26;
}
else if (tmpC >= 'A' && tmpC <= 'Z')
{
tmpC += ( i * 2 - spc * 2 );
tmpC = 'A' + ( tmpC - 'A' ) % 26;
}
else
{
spc++;
}
str[j][i] = (char)tmpC;
}
printf("%s\n",str[j]);
}
fflush(stdin);
getchar();
return 0;
}
题目要求的是不超过80个字符,所以定义字符串的时候应该是char str[81],result[81];。其他的我觉得不能有什么错吧。
#include
int main()
{
int n,i,j,add;
char str[80],result[80];
scanf("%d",&n);
getchar( ) ; // 吸收掉换行符
for(j=1;j<=n;j++)
{
int mark=0;
for(i=0;;i++)
{
if((str[i]=getchar())!=EOF)
{
if(str[i]=='\n')
{
str[i]=0;
break;
}
if(str[i]==32)
{
result[i]=32;
continue;
}
else if(str[i]>='A'&&str[i]<='Z')
{
add=mark*2;
mark++;
result[i]=(str[i]-'A'+add)%26+'A';
}
else if(str[i]>='a'&&str[i]<='z')
{
add=mark*2;
mark++;
result[i]=(str[i]-'a'+add)%26+'a';
}
else
result[i]=str[i];
}
else // 退出循环
break ;
}
result[i]=0;
printf("%s\n",result);
add=0;
}
return 0;
}