| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 648 人关注过本帖
标题:冒泡法排序。。排完数据都没了~~
取消只看楼主 加入收藏
zuifei07
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2014-2-5
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:3 
冒泡法排序。。排完数据都没了~~
for(i=1;i<(fileh+1);(i=i+1))
{
for(j=i+1;j<(fileh+1);(j=j+1))
{

printf("         %d          ",i);
ag=strcmp(CO[i],CO[j]);
if (ag>0)
{
    printf("str1大于str2的ascii码\n");

    TP=CO[i];
    sleep(50);
memset(CO[i],0,strmaxl);
strcat(CO[i],CO[j]);
memset(CO[j],0,strmaxl);
strcat(CO[j],TP);
memset(TP,0,strmaxl);


/*    TP=CO[i];
    CO[i]=CO[j];
    CO[j]=TP;*/  //用这个会提示左边的值别绪是左值。。不知道啥原因
} else if(ag<0)
{
    printf("str1小于str2的ascii码\n");
} else if(ag==0)
{
    printf("两个字符串相等\n");
}

}
}

    for (i=1;i<(fileh+1);i++)
    {
    printf("#%d   ######:%s \n",i,CO[i]);
    }
    getchar();
排完后输出:
#1   ######:
#2   ######:
#3   ######:
#4   ######:
#5   ######:
#6   ######:
#7   ######:
#8   ######:
#9   ######:
#10   ######:
#11   ######:
#12   ######:
#13   ######:
#14   ######:
#15   ######:
#16   ######:
#17   ######:
#18   ######:
#19   ######:
#20   ######:
#21   ######:
#22   ######:
#23   ######:
#24   ######:
#25   ######:
#26   ######:
#27   ######:
#28   ######:
#29   ######:
#30   ######:
#31   ######:
#32   ######:
#33   ######:
#34   ######:
#35   ######:
#36   ######:
#37   ######:
#38   ######:
#39   ######:
#40   ######:
#41   ######:
#42   ######:
#43   ######:
#44   ######:
#45   ######:
#46   ######:
#47   ######:
#48   ######:
#49   ######:
.................

为什么会这样?求解决方法!!
搜索更多相关主题的帖子: sleep 
2014-02-07 02:13
zuifei07
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2014-2-5
收藏
得分:0 
/*
程序 代号:0001

  功能:将文件1.txt中的数据按照重复次数降序去重整理


  步骤:


  版本 0.4
  {
  用二维数组~~
  大体恢复版本0.2思路
  }

  版本0.3
  {
  struck str
  {
  int namber;
  char str
  }
  1.不采用数组。。采用结构体。。这样没有了行数的限制
  缺陷:定义多个结构体变量。。占用大量空间。。况且还不能自动定义变量。。
  }




  版本 0.2
  {
     1.将数据排序(按ascill码排序..从小到大)。。得数组一
     2.从数组一挨个读取字符串。如果和数组一下一个字符串相同,该字符串的数量就加一。。不同。就将该字符串赋值给数组二
  }


  版本 0.1
  {
   1.将每个字符串复制两份
   2.将第一组数据去重整理
   3.将第一组的第一个字符与第二组每个字符想比较。记下重复的次数
   4.按照重复的次数将第一组数据降序排序。。
   5.输出
  }

备注:

1.要用到结构体

2.文件打开读取的练习

3.字符串比较的练习

http://blog.代码有参考价值。。【while的结束字符判断】
*/



#include<stdio.h>
#include<process.h>
#include<string.h>

#define  true 0;
#define   false -1;
#define  filehmax 101//支持最大的文件行数.需要比文件行数大1
#define  strmaxl  15//字符串最大长度



//全局变量区
char CO[filehmax][strmaxl];//100000000000000可以编译通过。。不过提示。占用的内存超过256MB。。可能无法运行。。
char *TP;//TP是temp的意思
int ag;






int main(void)
{
//功能变量区
    FILE *file;  //文件指针
    int fileh;   //文件行数

//临时变量区
char a;
int i,j,l;
   
//打开文件
restart:
    system("cls");
    printf("       本程序将从1.txt文件中读取数据,并进行处理。\n    文件最多:%d行\n单行字符个数最大为:%d\n  注意:程序有BUG。。最后一行不要为单独的回车。不然最后一个读出的数据会为乱码 ",filehmax,strmaxl);
    getchar();

    file=fopen("1.txt","r");
    if(file==NULL)
    {
        printf("文件1.txt打开失败!请确定文件是否存在。");
        getchar();
        goto restart;
    } else{
        printf("文件1.txt成功打开。\n");
        getchar();
    }





//得出文件行数,判断是否能处理
    fileh=0;
    while((a=fgetc(file))!=EOF)
    {
        if(a=='\n')
        {
            fileh++;
        }
        
    }
    fileh++;
 /*  这段统计代码。。会统计到文件中间会直接退出。。
 fileh=0;
    while((a=fgetc(file))!=EOF)
    {
        if(a=='\n')
        {
            fileh++;
        } else{
        a=fgetc(file);
        if(a==EOF)
        {
            fileh++;
            break;
        }
        }
    }
*/






//判断是否能进行操作
    if(fileh<(filehmax+1))
    {
        printf("文件行数为:%d  在最大行数(%d)之内 可以进行操作!",fileh,filehmax);
        getchar();
        goto begin;

    } else {
        printf("文件行数为:%d   大于最大行数:%d  不能进行操作!",fileh,filehmax);
        getchar();
        goto restart;
    }




begin:

//统计完文件行数后。。文件指针指向末尾。需要指向文件开头。
fseek(file,0,SEEK_SET);

//开始录入数据
    for (i=1;i<(fileh+1);i++)
    {

        fgets(CO[i],100,file);
        printf("刚刚读取%d行。数据为:%s",i,CO[i]);
    }

getchar();




















//开始对数据进行排序。。按照ascill从小到大排序
a:
for(i=1;i<(fileh+1);(i=i+1))
{
for(j=i+1;j<(fileh+1);(j=j+1))
{

printf("         %d          ",i);
ag=strcmp(CO[i],CO[j]);
if (ag>0)
{
    printf("str1大于str2的ascii码\n");


strcpy(TP,CO[i]);
memset(CO[i],0,strmaxl);


strcat(CO[i],CO[j]);
memset(CO[j],0,strmaxl);


strcat(CO[j],TP);
memset(TP,0,strmaxl);


/*    TP=CO[i];
    CO[i]=CO[j];
    CO[j]=TP;*/  //用这个会提示左边的值别绪是左值。。不知道啥原因
} else if(ag<0)
{
    printf("str1小于str2的ascii码\n");
} else if(ag==0)
{
    printf("两个字符串相等\n");
}

}


}




getchar();
    for (i=1;i<(fileh+1);i++)
    {
    printf("#%d   ######:%s \n",i,CO[i]);
    }
    getchar();

    goto a;

}
以上是全部代码

2014-02-07 13:47
zuifei07
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2014-2-5
收藏
得分:0 
.............................

就mei个能帮我的吗?
2014-02-08 19:48
zuifei07
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2014-2-5
收藏
得分:0 
回复 8楼 逆风而前
多谢。。多谢~~


问题已经解决了。。
原因是1.txt文件中有的字符串的长度超过了系统设定的strmaxl。。。。



2014-02-09 20:28
快速回复:冒泡法排序。。排完数据都没了~~
数据加载中...
 
   



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

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