问题:C语言初学者,过pta时一直有三个点显示段错误,有没有人可以解答一下,万分感谢。
思路:刚学习时没有学习strstr函数,就想着将字符串1一个一个扫描过去,与字符串2相同部分删除,删除通过将相同部分不放到字符串3中,不相同部分放到字符串3中,一次扫描完后在字符串3末尾加上‘\0’。然后再次扫描,直到没有相同.
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
输入格式:
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
输入样例:
Tomcat is a male ccatat
cat
输出样例:
Tom is a male
#include<stdio.h>
#include<string.h>
int judge(char *p1,char *p2,int i,int *p3){
int j,m=1;
for(j=1;*(p2+j)!='\0';j++){
i++;
if(*(p1+i)==*(p2+j)){
continue;
}
else if(*(p1+i)!=*(p2+j)){
m=0;
*p3=j;
break;
}
}
return m;
}
int shorten(char *s1,char *s2,char *s3,int length,int *m1){
int i,j,n,judge2=1;
n=0;
for(i=0;*(s1+i)!='\0';i++){
if(*(s1+i)!=*(s2)){
if(*(s1+i)==' '&&*(s1+i-1)==' '){
continue;
}
s3[n]=*(s1+i);
n++;
continue;
}
else if(*(s1+i)==*(s2)){
if(judge(s1,s2,i,m1)==1){
judge2=0;
i+=length-1;
continue;
}
else if(judge(s1,s2,i,m1)==0)
{
for(j=0;j<*m1;j++){
i=i+j;
if(*(s1+i)==' '&&*(s1+i-1)==' '){
continue;
}
s3[n]=*(s1+i);
n++;
}
}
}
}
s3[n]='\0';
if(judge2==0){
shorten(s3,s2,s3,length,m1);
return 0;
}
else if(judge2==1){
return 0;
}
}
int main(){
char t1[100],t2[100],t3[100];
int *n1;
gets(t1);
gets(t2);
int length=strlen(t2);
shorten(t1,t2,t3,length,n1);
puts(t3);
}