标题:冒泡法排序。。排完数据都没了~~
只看楼主
zuifei07
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2014-2-5
结帖率:77.78%
已结贴  问题点数:20 回复次数:8 
冒泡法排序。。排完数据都没了~~
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
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
得分:0 
回复 楼主 zuifei07
完整代码好么?你贴这半截出来,谁知道你这些变量是什么东西?

想抽苏烟了。
2014-02-07 03:25
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
得分:0 
吧代码写全。要不别人没办法帮你分析

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2014-02-07 10:00
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
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
得分:0 

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2014-02-08 09:24
zuifei07
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2014-2-5
得分:0 
.............................

就mei个能帮我的吗?
2014-02-08 19:48
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
得分:0 
有没有测试数据。就是你的那个1.txt文件,可以附件的方式上传上来。
这回应该可以了。
文件的路径,你在修改一下。TP指针我就没用了直接使用ch字符数组代替来当临时变量

[ 本帖最后由 逆风而前 于 2014-2-8 21:44 编辑 ]
2014-02-08 20:36
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
得分:20 
程序代码:
#include<stdio.h>
#include<process.h>
#include<string.h>
#define  true 0;
#define   false -1;
#define  filehmax 20//支持最大的文件行数.需要比文件行数大1
#define  strmaxl  15//字符串最大长度
//全局变量区
char CO[filehmax][strmaxl];
//char * TP;
char ch[strmaxl]="happy";
//TP=ch;
int ag;
void 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("F:\\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\n",i,CO[i]);
    }
    getchar();
    //开始对数据进行排序。。按照ascill从小到大排序
//a:
    for(i=1;i<(fileh);i++)
    {
        printf("         %d          ",i);
        for(j=i;j<(fileh);j++)
        {
            ag=strcmp(CO[j],CO[j+1]);
            if (ag>0)
            {
                printf("str1大于str2的ascii码\n");
                strcpy(ch,CO[j]);
                strcpy(CO[j],CO[j+1]);
                strcpy(CO[j+1],ch);
            } 
            else if(ag<0)
            {
                printf("str1小于str2的ascii码\n");
            }
            else if(ag==0)
            {
                printf("两个字符串相等\n");
            }
        }
    }
    printf("请输入一个字符,将输出结果:\n");
    getchar();
    for (i=1;i<(fileh+1);i++)
    {
        printf("#%d   ######:%s \n",i,CO[i]);
    }
    getchar();
    
//    goto a;
    
}
2014-02-08 21:40
zuifei07
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2014-2-5
得分:0 
回复 8楼 逆风而前
多谢。。多谢~~


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



2014-02-09 20:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-427082-1-1.html




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

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