| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 493 人关注过本帖
标题:求解释为什么总有错误
只看楼主 加入收藏
zhlianghai
Rank: 2
等 级:论坛游民
帖 子:30
专家分:54
注 册:2012-12-25
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:9 
求解释为什么总有错误
这是题目
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。

 输入格式:

输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。

 输出格式:

在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。

这是我写的
程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
    char str1[81],str2[81];
    char *stp;
    int n;
    gets(str1);
    gets(str2);
    n=strlen(str2);
    while(strstr(str1,str2)!=0){
        stp=strstr(str1,str2);
        *stp='\0';
        strcat(stp,stp+n);
    }
    puts(str1);
    return 0;
}

在pat测试的时候,最后两个测试点总是答案错误
还有这个也是
程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
    char str[81],str1[81],*p;
    int sz;
    gets(str);
    gets(str1);
    sz=strlen(str1);
    while(p=strstr(str,str1)){
            strcpy(p,p+sz);
    }
    printf("%s\n",str);
    return 0;
}


[ 本帖最后由 zhlianghai 于 2014-9-14 09:37 编辑 ]
搜索更多相关主题的帖子: 字符串 
2014-09-14 09:28
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
简单说说:
简单测试没有问题,请提出有问题的测试内容和结果
2014-09-14 10:22
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
简单说说:
这种问题如果出现在学校课程里面,最好不要使用strstr()
strcpy()
strlen()
等函数 请手动写自己需要的功能
2014-09-14 10:23
zhlianghai
Rank: 2
等 级:论坛游民
帖 子:30
专家分:54
注 册:2012-12-25
收藏
得分:0 
回复 2 楼 erty1001
pat测试结果不通过,我也看不到测试点~~
2014-09-14 10:27
zhlianghai
Rank: 2
等 级:论坛游民
帖 子:30
专家分:54
注 册:2012-12-25
收藏
得分:0 
回复 3 楼 erty1001
自己写?学字符串函数这一章,不就是让练习用这些函数吗
2014-09-14 10:28
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:7 
简单说说,这些函数的练习固然重要,可是我们在学习阶段,尽量去理解变量的结构和变量的变化细节和实现过程。
只有自己写这些代码,代码的可靠性才比较高
2014-09-14 11:15
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:3 
#include <stdio.h>
#include <string.h>
int main()
{
    char str1[81],str2[81];
    int i,j,k,length;
    printf("first:");
    gets(str1);
    printf("second:");
    gets(str2);
    for(length=0;length<81;length++)
    {
        if(str2[length]=='\0')
            break;
    }
    printf("str2 length=%d\n",length);
    for(i=0;i<81;i++)
    {
        if(i>0) i--;
        j=0;
        if(str1[i]!=str2[j]) continue;
        k=i;
        while(j<length)
        {
            k++;j++;
            if(str1[k]!=str2[j])    break;
        }
        if(j<length) continue;
        else
        {
            for(k=i;k<81;k++)
            {
                if(k+length<81)    str1[k]=str1[k+length];
                else break;
            }
            str1[k]='\0';
        }
    }



    printf("result:");



    printf("%s",str1);
    printf("|<-end/n");
    return 0;
}
2014-09-14 11:36
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
更正一下 :   if(i>0) i--; 不能用在这里

正确的结果为:
#include <stdio.h>
#include <string.h>
int main()
{
    char str1[81],str2[81];
    int i,j,k,length;
    printf("first:");
    gets(str1);
    printf("second:");
    gets(str2);
    for(length=0;length<81;length++)
    {
        if(str2[length]=='\0')
            break;
    }
    printf("str2 length=%d\n",length);
    for(i=0;i<81;i++)
    {
        j=0;
        if(str1[i]!=str2[j]) continue;
        k=i;
        while(j<length)
        {
            k++;j++;
            if(str1[k]!=str2[j])    break;
        }
        if(j<length) continue;
        else
        {
            for(k=i;k<81;k++)
            {
                if(k+length<81)    str1[k]=str1[k+length];
                else break;
            }
            str1[k]='\0';
            i--;
        }
    }



    printf("result:");



    printf("%s",str1);
    printf("|<-end/n");
    return 0;
}
2014-09-14 11:41
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
更正一下 :   if(i>0) i--; 不能用在这里

正确的结果为:
#include <stdio.h>
#include <string.h>
int main()
{
    char str1[81],str2[81];
    int i,j,k,length;
    printf("first:");
    gets(str1);
    printf("second:");
    gets(str2);
    for(length=0;length<81;length++)
    {
        if(str2[length]=='\0')
            break;
    }
    printf("str2 length=%d\n",length);
    for(i=0;i<81;i++)
    {
        j=0;
        if(str1[i]!=str2[j]) continue;
        k=i;
        while(j<length)
        {
            k++;j++;
            if(str1[k]!=str2[j])    break;
        }
        if(j<length) continue;
        else
        {
            for(k=i;k<81;k++)
            {
                if(k+length<81)    str1[k]=str1[k+length];
                else break;
            }
            str1[k]='\0';
            i--;
        }
    }



    printf("result:");



    printf("%s",str1);
    printf("|<-end/n");
    return 0;
}
2014-09-14 11:41
zhlianghai
Rank: 2
等 级:论坛游民
帖 子:30
专家分:54
注 册:2012-12-25
收藏
得分:0 
回复 6 楼 erty1001
哦了解了
2014-09-14 12:21
快速回复:求解释为什么总有错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018912 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved