问题如下(字符串减法):
我自己的代码如下:
#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;
}
测试结果如下:
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;
}