| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
大量收QQ微信精准粉/交友粉,非诚勿扰千里之行 始于足下
共有 575 人关注过本帖
标题:运行的时候屏幕显示已停止工作,帮忙看一下怎么回事?
只看楼主 加入收藏
青蝶
Rank: 2
等 级:论坛游民
帖 子:144
专家分:51
注 册:2018-2-4
结帖率:92.86%
  已结贴   问题点数:20  回复次数:10   
运行的时候屏幕显示已停止工作,帮忙看一下怎么回事?
题目描述
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章
中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。

输入格式:
共2行。
第1行为一个字符串,其中只含字母,表示给定单词;
第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

输出格式:
一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。

输入输出样例
输入样例#1:
To
to be or not to be is a question
输出样例#1:
2 0

输入样例#2:
to
Did the Ottoman Empire lose its power at that time
输出样例#2:
-1


我的程序第一个样例可以正确输出,第二个样例显示已停止工作,没法得到结果,求大佬帮忙看一下。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int flag=0;
char a[1000010],s[15],temp[1000010];

int judge(char *s1,char *s2){
    int i=0;
    if(strlen(s1)!=strlen(s2)) return 0;
    while(s1[i]!='\0'){
        if(s1[i]>='A' && s1[i]<='Z'){
            if(!(s1[i]==s2[i] || s1[i]+32==s2[i])) return 0;
        }
        else{
            if(!(s1[i]==s2[i] || s1[i]-32==s2[i])) return 0;
        }
        i++;
    }
    return 1;
}
        
int main(void){
    int i=0,j,k=0,l,index;
    char c;
    scanf("%s\n",s);
    scanf("%c",&c);
    while(c!='\n'){
      a[i++]=c;
      scanf("%c",&c);
}
    a[i]='\0';
    l=strlen(a);
    i=0;
    while(i<l){
      j=0;
      while(a[i]!=' '){
        temp[j++]=a[i++];
        flag=1;
    }
      temp[j]='\0';
      if(flag==1){
        if(judge(s,temp)){
            k++;
            flag=0;
            if(k==1) index=i-j;
      }
      }
      i++;
}
    if(k==0) printf("-1\n");
    else printf("%d %d\n",k,index);
    return 0;
}
   
2018-07-05 20:46
自学的数学
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:603
专家分:2418
注 册:2017-11-15
  得分:10 
我看了,你的问题出在被侧单词出现在字符窜的中间和末尾位置时,就运行出错。比如:
to
dfh sdgh to sg
2018-07-05 23:09
青蝶
Rank: 2
等 级:论坛游民
帖 子:144
专家分:51
注 册:2018-2-4
  得分:0 
回复 2楼 自学的数学
想问一下为什么会这样?
2018-07-05 23:27
自学的数学
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:603
专家分:2418
注 册:2017-11-15
  得分:0 
被调函数有问题。
2018-07-05 23:37
青蝶
Rank: 2
等 级:论坛游民
帖 子:144
专家分:51
注 册:2018-2-4
  得分:0 
回复 4楼 自学的数学
看不出来哪里有问题,大佬能帮一下么?
2018-07-06 19:37
偏飞
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:49
注 册:2018-7-6
  得分:10 
这样改试试,红色部分
int main(void)
{
    int i = 0, j, k = 0, l, index;
    char c;
    scanf("%s\n", s);
    scanf("%c", &c);
    while (c != '\n')
    {
        a[i++] = c;
        scanf("%c", &c);
    }
    a[i] = '\0';
    l = strlen(a);
    i = 0;
    while (i < l)
    {
        j = 0;
        while (a[i] != ' ' && i<l)
        {
            temp[j++] = a[i++];
            flag = 1;
        }
        temp[j] = '\0';
        if (flag == 1)
        {
            if (judge(s, temp))
            {
                k++;
                flag = 0;
                if (k == 1)
                    index = i - j;
            }
        }
        i++;
    }
    if (k == 0)
        printf("-1\n");
    else
        printf("%d %d\n", k, index);
    return 0;
}
2018-07-06 20:08
青蝶
Rank: 2
等 级:论坛游民
帖 子:144
专家分:51
注 册:2018-2-4
  得分:0 
回复 6楼 偏飞
谢谢大佬,样例过了。但是测试数据的时候有一组没过,就是文章开头有空格的情况:
输入:
td
 Td tLWCsrmt
输出应该是:
1 2

我的输出是:
1 0

想问一下怎么回事?
2018-07-07 19:20
青蝶
Rank: 2
等 级:论坛游民
帖 子:144
专家分:51
注 册:2018-2-4
  得分:0 
回复 6楼 偏飞
还想问一下之前不加红色那一句时,为什么可以过样例1?
2018-07-07 19:58
偏飞
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:49
注 册:2018-7-6
  得分:0 
回复 8楼 青蝶
你的编译器有问题,样例1在我的编译器过不了
2018-07-07 20:34
偏飞
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:49
注 册:2018-7-6
  得分:0 
回复 7楼 青蝶
在你按下回车键后,scanf接收第一个非空字符作为输入,所以前面的空格是读不到的
2018-07-07 21:11







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

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