| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 382 人关注过本帖
标题:排序问题
只看楼主 加入收藏
fireice11
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2010-10-26
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:1 
排序问题
一个数据文件如下:
abd12ef
cf3205g
egi08pk
gop66hi
pfr52lf
ope48pk
adc68p6
vbg32lo
我想以每个字符串的4、5位为关键字进行升序排序,排序后的结果应该是:
egi08pk
abd12ef
cf3205g
vbg32lo
ope48pk
pfr52lf
gop66hi
adc68p6
可我却得不到正确结果,我的代码如下:
#include "stdafx.h"
#include<stdio.h>
#include "string.h"
#include "stdlib.h"
#define LENGTH 1000   
//void paixu(int shuju[], int shangbiao, int xiabiao);
void paixu(int shuju[], int shangbiao, int xiabiao,char str[][]);
void main()
{
 int i,n;
int shuju[LENGTH];
FILE *fi;
fi=fopen("test.txt","r");
char str[LENGTH][100];
char strr[100];
int linenum=0;
char b[LENGTH][100];
if(fi==NULL)
{
  printf("can't open test.txt to read!\n");
  exit(0);
}
for(i=0;i<8;i++)
{
fgets(strr,100,fi);
strcpy((char*)str[i],strr);

linenum++;
}
for(i=0;i<8;i++)
{
printf("%s\n",str[i]);
}
printf("共有%d行\n",linenum);
fclose(fi);

for(i=0;i<linenum;i++)
{
strncpy(b[i],str[i]+3,2);
b[i][5]=0;
printf("%s\n",b[i]);//12345  
}
for(i=0;i<linenum;i++)
{
shuju[i]=atoi((char*)b[i]);
printf("%d\n",shuju[i]);
}
paixu(shuju,0,linenum-1,str[8][100]);   
printf("排序后:\n");
for(i=0;i<linenum;i++) printf("%d\n ",str[i]);
putchar('\n');
getchar();
getchar();   
}
//void paixu(int shuju[], int shangbiao, int xiabiao)
void paixu(int shuju[], int shangbiao, int xiabiao,char str[][]);

{
 int i=shangbiao,j=xiabiao;   
 int shu=i;   
 int zhongjie;
 char bb[100];
if(shangbiao<xiabiao)
{
  while(i<j)  
  {
  for(;j>shu;j--)  
  {
  if(shuju[j]<shuju[shu])  
  {
  zhongjie=shuju[j];
  shuju[j]=shuju[shu];   
  shuju[shu]=zhongjie;
bb=str[j];
  str[j]=str[shu];   
  str[shu]=bb;
  shu=j;   
  break;  
  }
  }
  i++;   
  for(;i<shu;i++)  
  {
  if(shuju[i]>shuju[shu])
  {
  zhongjie=shuju[i];
  shuju[i]=shuju[shu];
  shuju[shu]=zhongjie;
bb=str[i];
  str[i]=str[shu];   
  str[shu]=bb;
  shu=i;  
  break;
  }
  }
  j--;  
  }
  paixu(shuju,shangbiao,shu-1,str[][]);  
  paixu(shuju,shu+1,xiabiao,str[][]);   
}   
}
请问错在哪里,该如何改正?
搜索更多相关主题的帖子: 字符串 关键字 
2010-10-27 22:19
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:20 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define  Length 1000
#define  N 100
typedef struct
{
    char S[Length];
    int  num;
}String;
String Str[N];
int cmp(const void *a,const void *b)
{
    return (*(String *)a).num>(*(String *)b).num;
}
int main()
{
    freopen("IO.txt","r",stdin);//换成你的test.txt 就行了
    int i,j;
    j=0;
    while(scanf("%s",Str[j].S)!=EOF)
        Str[j].num=(Str[j].S[3]-'0')*10+Str[j].S[4]-'0',j++;
    qsort(Str,j,sizeof(String),cmp);
    for(i=0;i<j;i++)
        printf("%s\n",Str[i].S);
    return 0;
}

[ 本帖最后由 NoSoul 于 2010-10-28 12:27 编辑 ]

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2010-10-28 12:26
快速回复:排序问题
数据加载中...
 
   



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

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