Xyz____ 2019-12-08 12:50 采纳率: 0%
浏览 344
已采纳

在oj上显示运行时错误,有大佬能帮忙看一下吗?

问题描述:
任意给定两个字符串str1与str2, str1与str2中可以包含任意字符。你的任务是统计字符串str2在str1中出现的次数。
如字符串str1为“asasasbbbasbas”,str2为“as”,则统计结果为5。注意如果字符串str1为“aaaaa”,字符串str2为“aaa”,则统计结果为3。
输入与输出要求:
输入两个长度不超过100的字符串,以换行符结束。输出统计次数,占一行。
程序运行效果:
dhd dhdhdfg dhd dh zx67 dhd mklodhdh↙
dhd↙
6↙
#include
#include
int main()
{
int i, count;
char str1[102], str2[102], s1, *s2, *str;
s1=(char
)malloc(102);
s2=(char*)malloc(102);
str=(char*)malloc(102);

fgets(str1,102,stdin);
for(i=0;str1[i]!='\n';i++)//统计str1中的字符个数 
{
}
str1[i]='\0';//将str1中的最后一个'\n'转化成'\0'

fgets(str2,102,stdin);
for(i=0;str2[i]!='\n';i++)//统计str2中的字符个数 
{
}
str2[i]='\0';//将str2中的最后一个'\n'转化成'\0'
count=0;//count的初始化

str=str1;//将str1的字符放入str中,能够让下面操作直接用str++ 
while(*str!='\0')
{
    s1=str;//s1为str的当前判断字符 
    s2=str2;//s2为str2的首字符
    while(*s1==*s2&&*s2!='\0')//判断两个字符串的每个字符是否相等,若相等且s2并未结束则各往后读一位字符 
    {
        s1++;
        s2++;
    }
    if(*s2=='\0')//跳出while循环时s2已经结束了则满足条件 
    {
        count++;//若满足条件count加一 
    } 
    str++;  
}
printf("%d", count);
free(s1);
free(s2);
free(str);
return 0; 

}

  • 写回答

1条回答 默认 最新

  • lqj1985 2019-12-09 15:56
    关注

    s1=(char*)malloc(102);//这里我加了*号
    /*free(s1);
    free(s2);
    free(str);*/这三句注释掉
    之后在自己机子上跑了上面的两个例子,还跑了一个第一个字符串比第二个字符串短的情况,都没问题,暂时想不出其它情况了。openjudge上尝试了找这个题,没找到
    我以现有的知识自己写了一个,如下:
    —————————————————————————————————
    #include
    #include
    using namespace std;
    main()
    {
    char str1[101];
    char str2[101];
    //int Str2IsAPieceOfStr1=1;
    char *p;
    char *q;
    char *start;
    int count=0;
    cin.getline(str1,100);
    cin.getline(str2,100);
    // printf("%s\n",str1);
    int i=strlen(str2);
    p=str1;
    for(;*p!=0;p++)
    {
    start=p;
    q=str2;
    int Str2IsAPieceOfStr1=1;
    for(int j=0;j<i;j++)
    {
    if(*start==*q)
    {
    start++;
    q++;
    }
    else
    {
    Str2IsAPieceOfStr1=0;

    break;
    }
    }
    if(Str2IsAPieceOfStr1==1)
    {
    count++;

    }

    }
    cout<<count;
    return 0;

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 freertos下使用外部中断失效
  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源
  • ¥15 解决websocket跟c#客户端通信
  • ¥30 Python调用dll文件输出Nan重置dll状态
  • ¥15 浮动div的高度控制问题。
  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论