帮我看看吧毫无思路怎么写

求一个字符串长度,并对该字符串按以下方法将其加密变换:
    A->Z  a->z
    B->Y  b->y
    C->X  c->x
    ……  ……
    Z->A  z->a
  即字母A变成Z、字母B变成Y、…,非字母字符不变。
输入格式:
从键盘上读入一行字符(约定:字符数≤127字节)
输出格式:
在屏幕上先显示这一行字符的长度,再显示生成的密文。
输入样例:
AB 12@#ax
输出样例:
在这里给出相应的输出。例如:
9
ZY 12@#zc

从键盘获取一行输入可以用fgets()函数;

而加密过程可以这么来实现:起始字符为'A'或'a',然后加上偏移量即可,偏移量就是25减去这个字符和首字母'A'或'a'的“距离”,即ch-'A'或ch-'a' ,整个加密,大写字母可以是:'A'+25-(ch-'A') ,小写字母可以是:'a'+25-(ch-'a') 。

代码如下:

参考链接:
C中读入一行字符串的方法 - 简书
ASCII码对照表-完整ASCII码表-我就查查询


#include <stdio.h>
#include <string.h>
int main(void){
    
    char str[130];
    
    //从键盘读入一行输入到字符数组str中,第128个字符位置用于存储输入达到127个字符时字符串末尾的空字符 
    // https://www.jianshu.com/p/73e004f22c1c
    fgets(str,128,stdin);  
    
    //printf("before,str=%s\n",str);
    //printf("%d\n",strlen(str)); //打印这行字符的长度 
    
    //当输入的字符数小于127个时,fgets函数会把换行符读入字符数组,下面的代码是去除此种情况下的最后一个换行字符
    if(str[strlen(str)-1]=='\n'){ 
        str[strlen(str)-1]='\0';
    }
//    printf("after,str=%s\n",str);
    
    int i=0;
    printf("%d\n",strlen(str)); //打印这行字符的长度 
    while(str[i]!='\0'){ //遍历这行字符 
        char ch = str[i];
        //   http://ascii.wjccx.com/
    //加密过程就是 起始字符'A''a',然后加上偏移量即可,偏移量就是25减去这个字符和首字母'A''a'的“距离”,即ch-'A'或ch-'a' 
        if(ch>='A'&&ch<='Z'){  
            printf("%c", ('A'+25-(ch-'A')));
        }else if(ch>='a'&&ch<='z'){
            printf("%c", ('a'+25-(ch-'a')));
        }else{ //其他字符不变 
            printf("%c",ch);
        }
        i++; //访问字符数组下标变量+1,以便访字符数组的下一个位置的字符 
    }
    printf("-end");
    
    return 0;
} 

img


#include<stdio.h>
#include<string.h>
int main()
{
    char a[128];
    int i;
    gets(a);
    for(i=0;a[i]!='\0';i++)
    {
        if(a[i]>='a'&&a[i]<='z')
            a[i]='a'+'z'-a[i];
        if(a[i]>='A'&&a[i]<='Z')
            a[i]='A'+'Z'-a[i];
    }
    printf("%d\n",strlen(a));
    puts(a);
    return 0;
}

1,输入保证可以空格输入
--> scanf("%[^\n]", str);
2,对于字母的ascii码知道连续的数字,进行做差分来返现输出字母

    {
        char str[128] = { 0 };
        int len = 0;
        while (scanf("%[^\n]", &str))
        {
            len = strlen(str);
            printf("%d\n",len);
            for (int i = 0; i < len; i++)
            {
                if (str[i] >= 'a' && str[i] <= 'z')
                {
                    str[i] = (int)'a' + (int)'z' - str[i];
                }
                else if (str[i] >= 'A' && str[i] <= 'Z')
                {
                    str[i] = (int)'A' + (int)'Z' - str[i];
                }
                printf("%c", str[i]);
            }
            printf("\n");
        }
    }