函数Encryption (char *s)的功能是先把字符串中的内容逆置。然后判断是否为小写母,如果是则向下移3位(如:abcxyz变为defabc) 例如:字符串中原有的字符串为:abcxyz123ABC,则调用该函数后, 串中的内容为:CBA321cbafed。 程序中有二行语句中存在错误,请改正。 1 #include <ctype.h> 2 #include <stdio.h> 3 #include <string.h> 4 #define N 81 5 void Encryption( char str[] ); //字符串中的内容逆置后移位 6 int main(){ 7 char str[N]; 8 gets(str); 9 Encryption (str); 10 puts(str); 11 return 0; 12 } 13 void Encryption( char str[] ){ 14 int i, j, temp; 15 for(i=0, j=strlen(str); i<j; i++ , j--) { 16 temp=str[i]; str[i]=str[j]; str[j]=temp; 17 } 18 i=0; 19 while(str[i]!='\0') { 20 if(islower(str[i])) //判断是否为小写字母 21 str[i]=str[i]+3; 22 i++; 23 } 24 }
时间: 2024-03-26 13:35:16 浏览: 19
以下是修正后的程序代码:
```
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#define N 81
void Encryption(char str[]);
int main() {
char str[N];
gets(str);
Encryption(str);
puts(str);
return 0;
}
void Encryption(char str[]) {
int i, j, temp;
for (i = 0, j = strlen(str) - 1; i < j; i++, j--) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
i = 0;
while (str[i] != '\0') {
if (islower(str[i])) { //判断是否为小写字母,注意大括号的位置
str[i] = (str[i] - 'a' + 3) % 26 + 'a'; //移位操作
}
i++;
}
}
```
需要注意的地方:
1. 第15行中的`j=strlen(str)`应该改为`j=strlen(str)-1`,否则会将字符串最后一个字符与`\0`交换位置,导致输出错误。
2. 第20行的`if(islower(str[i]))`后面应该加上大括号,否则只会将后面的`i++`语句视为if的一部分。
3. 第21行的移位操作需要特别注意,需要先将字符转换为数字再进行移位操作,最后再将数字转换回字符。移位操作的公式为`(str[i] - 'a' + 3) % 26 + 'a'`,其中`'a'`是字符'a'的ASCII码值。