问题: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
#include
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);
}
if(judge(s1,s2,i,m1)==1)
else if(judge(s1,s2,i,m1)==0)
从这两句代码反复调用judge,就反映了你思维很混乱
你根本没有搞清楚到底应该如何删除子串,就着急写代码,代码也写的一团乱
推翻了重来吧
你的程序应该实现如下功能:
1.输入两个字符串s1,s2
2.遍历s1
3.从s1的每一个位置遍历s2的长度,判断是否与s2一致
4.如果不一致,跳出内层循环,继续匹配下一项
5.如果一致,那么循环的将s1中所有这个位置之后的字符向左移动,覆盖掉原来的字符,不要忘记移动最后的\0
6.移动过后索引要-1,以便于继续判断新串是否符合要求
7.输出s1,题目要求删除子串,你搞个s3就离题万里
仅供参考:
#include <stdio.h>
#include <string.h>
char s[256];
char *p;
int r,n,i;
int main() {
while (1) {
printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");
fgets(s,256,stdin);
if ('\n'==s[0]) break;
p=s;
while (1) {
p=strstr(p,"%20");
if (p) {
memmove(p+1,p+3,strlen(p)-3+1);
p[0]=' ';
} else break;
}
p=s;
while (1) {
p=strstr(p,"你懂得");
if (p) {
memmove(p+6,p+6,strlen(p)-6+1);
for (i=0;i<6;i++) p[i]='X';
} else break;
}
printf("%s",s);
}
return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//