| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1224 人关注过本帖
标题:答案错误!崩溃了
只看楼主 加入收藏
hcl1008
Rank: 1
等 级:新手上路
帖 子:18
专家分:9
注 册:2011-12-8
结帖率:71.43%
收藏
已结贴  问题点数:20 回复次数:11 
答案错误!崩溃了
#include <stdio.h>
#include <string.h>
int main()
{
    int i,n,j,e=0,f=0,d[20],t,s=0;
    char ch[1000][16],c[500][16];
    char str[16],str2[16],str4[16];
    char str1[]={".exe"};
    while(scanf("%d",&n) && n!=0)
    {
        s=0;
        scanf("\n");
        for(i=0;i<n;i++)
        {
            gets(ch[i]);
            d[i]=strlen(ch[i]);
        }
        for(i=0;i<n;i++)
        {
            e=0;
            t=0;
                for(j=d[i]-4;j<=d[i]-1;j++)
                {
                    str[e]=ch[i][j];
                    e++;
                }
                str[e]='\0';
                if(strcmp(str,str1)==0)
                {
                    f=0;
                    for(j=0;j<d[i]-4;j++)
                    {
                        str2[f]=ch[i][j];
                        f++;
                    }
                    str2[f]='\0';
                    for(j=0;j<n;j++)
                    {
                        t=0;
                        if(strcmp(str2,ch[j])==0)
                        {
                            t=1;
                            strcpy(c[s],ch[i]);
                            s++;
                            break;
                        }
                    }
               
                }
        }

        for(i=0;i<s-1;i++)
        {
            for(j=i+1;j<s;j++)
            {
                if(strcmp(c[i],c[j])>0)
                {
                    strcpy(str4,c[i]);
                    strcpy(c[i],c[j]);
                    strcpy(c[j],str4);
                }
            }
        }
        for(i=0;i<s;i++)
            puts(c[i]);               
    }

    return 0;
}
题目是
我会给你一些文件名列表,你能开发一款“病毒扫描器”帮我识别出哪些是病毒文件吗?识别方法是:

文件名以“.exe”结尾。
在文件名列表中同时还存在去掉“.exe”后同名的文件。

输入
输入数据有多组。
每组输入的第一行是一个整数 n(0 < n <= 1000),表示接下来会有 n 个文件名。
接下来的 n 行为文件名,每个文件名占一行。
文件名最多 16 个字符,并且中间不包含空格。
如果 n 等于 0,则程序结束。

输出
以字典顺序输出每一组数据中的病毒文件名。
每个文件名输出一行。

样例输入
2
a.txt
a.txt.exe
2
a
a.txt
10
a.txt
b.txt
d.txt.exe
c.txt
d.txt
a.txt.exe
e.txt
f.txt
e.txt.exe
g.txt
0
样例输出
a.txt.exe
a.txt.exe
d.txt.exe
e.txt.exe
提示



例子中第二组没有病毒文件。

找出病毒文件后,输出前不要忘了排序。

求高手解答到底哪里错了!输出来和测试数据一模一样啊啊!谢谢!





























































































































搜索更多相关主题的帖子: include 
2011-12-16 20:01
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:8 
文件名最多 16 个字符,并且中间不包含空格。
别忘了还有一个字符串结束符'\n',所以你的缓存至少需要17个字符
送一段代码给你
程序代码:
#include<stdio.h>
#include<string.h>
char str[1000][24];
char * virus[1000];
int vn;
int isVirus(char * s)
{
    int len;
    len = strlen(s);
    if(len > 4 && strcmp(s + len - 4, ".exe") == 0) return 1;
    return 0;
}
int cmp(const void * a, const void * b)
{
    return strcmp(*(char **)a, *(char **)b);
}
int main()
{
    int n, i;
    while(scanf("%d", &n), n)
    {
        for(vn = i = 0; i < n; i++)
        {
            scanf("%s", str[vn]);
            if(isVirus(str[vn])) virus[vn++] = str[vn];
        }
        qsort(virus, vn, sizeof(char *), cmp);
        for(i = 0; i < vn; puts(virus[i++]));
    }
    return 0;
}

重剑无锋,大巧不工
2011-12-16 22:25
hcl1008
Rank: 1
等 级:新手上路
帖 子:18
专家分:9
注 册:2011-12-8
收藏
得分:0 
回复 2楼 beyondyf
我之前开数组开了20的!也是错的!恩,谢谢你!不过你写的我看不懂哦!我刚开始学这个,还只会些皮毛呢,嘿嘿!
2011-12-17 16:29
double聪
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:118
注 册:2011-11-19
收藏
得分:3 
让我猜一下。。你是浙商大的吧!?嘿嘿。。这题我也错了n次了。。。
2011-12-17 21:32
樾宝
Rank: 3Rank: 3
来 自:常德
等 级:论坛游侠
帖 子:72
专家分:147
注 册:2011-8-19
收藏
得分:0 
谢谢了啊!
正愁呢
2011-12-18 11:08
hcl1008
Rank: 1
等 级:新手上路
帖 子:18
专家分:9
注 册:2011-12-8
收藏
得分:0 
回复 4楼 double聪
哈哈!聪聪,你猜的真准哦!
2011-12-18 16:45
double聪
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:118
注 册:2011-11-19
收藏
得分:2 
回复 6楼 hcl1008
诶?知道我?你哪位类???
2011-12-18 19:56
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:3 
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
    int n,t,j=0,i,l;
    char ch[1000][17],str[1000][17],temp[17];
    while(scanf("%d",&n)&&n)
    {
        for(i=0;i<n;i++)
        {
            scanf("%s",ch[i]);
            if(strstr(ch[i],".exe")!=0)
            {strcpy(str[j],ch[i]);j++;}
        }
    }
    for(i=0;i<j;i++)
    {
        for(l=i+1;l<j;l++)
        {
            if(strcmp(str[i],str[l])>0)
            {
                strcpy(temp,str[l]);
                strcpy(str[l],str[i]);
                strcpy(str[i],temp);
            }
        }
    }
    for(i=0;i<j;i++)
    {
        t=strlen(str[i]);
        str[i][t]='\0';
        printf("%s\n",str[i]);
    }
    return 0;
}

我也WA WA WA WA
2011-12-18 20:12
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:2 
回复 7楼 double聪
silly  silly   silly
2011-12-18 20:13
hcl1008
Rank: 1
等 级:新手上路
帖 子:18
专家分:9
注 册:2011-12-8
收藏
得分:0 
回复 7楼 double聪
额!聪聪鼎鼎大名,我当然听说过了呀!聪聪的名声响彻工商哦!
2011-12-18 20:14
快速回复:答案错误!崩溃了
数据加载中...
 
   



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

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