新手求助,自己测试输出都对了怎么就是过不了。

#include<string.h>
#include<stdio.h>
int main()
{
	int orilen=0,i=0,j=0,jlen=0;
	int amletter=0,amspace=0,amdigit=0,amother=0;
	char ori[1000],letters[1000];
	while((ori[i]=getchar())!='\n')
	{
		i++;
		orilen++;
	}
	ori[i]='\0';
	for(i=0;ori[i]!='\0';i++)
	{
		if(ori[i]>='a'&&ori[i]<='z')
		{
			amletter++;
			letters[j]=ori[i]-32;
			j++;
			jlen++;
		}
		else if(ori[i]>='A'&&ori[i]<='Z')
		{
			amletter++;
			letters[j]=ori[i]+32;
			j++;
			jlen++;
		}
		else if(ori[i]>='0'&&ori[i]<='9')
		{
			amdigit++;
		}
		else if(ori[i]==' ')
		{
			amspace++;
		}
		else
		{
			amother++;
		}
	}
	
	for(i=0;i<jlen;i++)
	{
		printf("%c",letters[i]);
	}
	printf("\nletters:%d, digits:%d, spaces:%d others:%d.",amletter,amdigit,amspace,amother);
	return 0;
}

这是我的

#include<stdio.h>

int main(){
    char ch1[2000],ch2[2000];
    int i;
    int letters = 0,digits = 0,spaces = 0, others = 0;
    
    i = 0;
    while((ch1[i] = getchar()) != '\n')
        i++;
    ch1[i] = '\0';
    
    for(i = 0 ;ch1[i] != '\0'; i++){
        if(ch1[i] >= 'a' && ch1[i] <= 'z'){
            ch2[i] = ch1[i] - 32;
            printf("%c",ch2[i]);
        }
        else if(ch1[i] >= 'A' && ch1[i] <= 'Z')
        {
            ch2[i] = ch1[i] + 32;
            printf("%c",ch2[i]);
        }
        else 
            ch2[i] = ch1[i];
    }
    ch2[i] = '\0';
    printf("\n");
    
    for(i = 0 ;ch2[i] != '\0'; i++){
        if((ch2[i] >= 'a' && ch2[i] <= 'z') || (ch2[i] >= 'A' && ch2[i] <= 'Z'))
            letters++;
        else if(ch2[i] >= '0' && ch2[i] <= '9')
            digits++;
        else if(ch2[i] == ' ')
            spaces++;
        else
            others++;
    }
    printf("letters:%d, digits:%d, spaces:%d, others:%d.",letters,digits,spaces,others);
    return 0;
}

这是网上找的

网上的能过pta,我的死活过不了啊啊啊啊啊啊气死我了。

感觉犯了很蠢的错误又找不出来。

letters[j],j在里面起了啥作用?

编译器的问题吧,我用vscode两个代码都能正确运行