先说一下报错案例吧,过了五个用例,就。。觉得好像逻辑确实没啥问题,一直改也不对,先放一放吧

#include<stdio.h>
#include<string.h>
char psd[27],vis[27],str[1005];
int main(){
    while(scanf("%s %s",psd,str)!=EOF){
        memset(vis,0,sizeof(vis));
        int tmp,idx=0;
        //密码对应 
        for(int i=0;psd[i]!=0;i++){
            if(psd[i]>='A'&&psd[i]<='Z'){
                tmp=psd[i]-'A';
            }else{
                tmp=psd[i]-'a';
            }
            if(vis[tmp]==0){
                psd[idx++]='a'+tmp;
                vis[tmp]=1;
            }
        }
        for(int i=0;i<26;i++){
            if(vis[i]==0){
                psd[idx++]='a'+i;
            }
        }
        for(int i=0;str[i]!=0;i++){
            str[i]=psd[str[i]-'a'];
            if(str[i]>='A'&&str[i]<='Z'){
                str[i]+=32;
            }
        }
        printf("%s\n",str);        
    }
    return 0;
}