PTA-A 1050题 这两个测试点错在哪里

问题如下(字符串减法):

img

我自己的代码如下:

#include<iostream>
#include<cstdio>
using namespace std;

int hashtable[129]={0};

int main(){
    char s1[106];
    char s2[106];
    cin.getline(s1,106);
    cin.getline(s2,106);
    int i;
    for(i=0;s2[i]!='\0';i++){
        hashtable[s2[i]-'0']=1;
    }
    for(i=0;s1[i]!='\0';i++){
        if(hashtable[s1[i]-'0']!=1)printf("%c",s1[i]);
    }
    return 0;
}

测试结果如下:

img

PTA看不了测试点1,3的具体数据,请问能给出一组让我的代码运行结果错误的数据,或者指出我的写法的错误之处吗?

题中有一个信息是两个字符串长度不超过10^4。
看下是不是这个问题导致的。

s1和s2的长度是106,建议getline指定长度105,并且s1,s2最好进行初始化为0
hashtable的小标为何是减'0'呢?

不用减去'0',修改如下,供参考:

#include<iostream>
#include<cstdio>
using namespace std;
int hashtable[129]={0};
int main(){
    char s1[106];
    char s2[106];
    cin.getline(s1,106);
    cin.getline(s2,106);
    int i;
    for(i=0;s2[i]!='\0';i++){
        hashtable[s2[i]]=1;
    }
    for(i=0;s1[i]!='\0';i++){
        if(hashtable[s1[i]]!=1)printf("%c",s1[i]);
    }
    return 0;
}

#include<iostream>
#include<cstdio>
using namespace std;
int hashtable[129]={0};
int main(){
    char s1[106];
    char s2[106];
    cin.getline(s1,106);
    cin.getline(s2,106);
    int i;
    for(i=0;s2[i]!='\0';i++){
        hashtable[s2[i]]=1;
    }
    for(i=0;s1[i]!='\0';i++){
        if(hashtable[s1[i]]!=1)printf("%c",s1[i]);
    }
    return 0;
}

再修改下试试:

#include<iostream>
#include<cstdio>
using namespace std;
int hashtable[129]={0};
int main(){
    char s1[106];
    char s2[106];
    cin.getline(s1,106);
    cin.getline(s2,106);
    int i;
    for(i=0;i<strlen(s2);i++){
        hashtable[s2[i]]=1;
    }
    for(i=0;i<strlen(s1);i++){
        if(hashtable[s1[i]]==0)cout<<s1[i];
    }
    return 0;
}