网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月27日漏签0天
c语言吧 关注:801,834贴子:4,375,671
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 2回复贴,共1页
<<返回c语言吧
>0< 加载中...

关于《The C Programming Language》中指针程序的问题,请大家帮助~

  • 取消只看楼主
  • 收藏

  • 回复
  • gyyts099
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<stdio.h>
#include<string.h>
#define MAXLINES 50 //进行排序的最大文本行数
#define MAXLEN 100 //每个输入文本行的最大长度
#define ALLOCSIZE 5000 //可用空间大小
char *lineptr[MAXLINES]; //指向文本行的指针数组
static char allocbuf[ALLOCSIZE]; //alloc使用的存储区
static char *allocp=allocbuf; //下一个空闲位置
int getline(char *,int); //将一行读入到s中并返回其长度
char *alloc(int); //返回指向n个字符的指针
int readlines(char *lineptr[],int nlines); //读取输入行
void writelines(char *lineptr[],int nlines); //写输入行
void qsort(char *lineptrp[],int left,int right);
//按递增顺序对v[left]-v[right]进行排序
void swap(char *v[],int i,int j); //交换v[i]和v[j]
int main()
{
int nlines; //读取的输入行数目
if((nlines=readlines(lineptr,MAXLINES))>=0) //注意readline的停止条件
{
qsort(lineptr,0,nlines-1);
writelines(lineptr,nlines);
return 0;
}
else
{
printf("Error:Input too big to sort.\n");
return 1;
}
}
char *alloc(int n) //返回指向n个字符的指针
{
if(allocbuf+ALLOCSIZE-allocp>=n)
{
allocp+=n;
return allocp-n;
}
else
return 0;
}
int getline(char *s,int lim) //将一行读入到s中并返回其长度
{
char c;
int i;
for(i=0;(c=getchar())!=EOF&&c!='\n';i++)
s[i]=c;
if(c='\n')
s[i++]=c;
s[i]='\0';
if(i<=lim)
return i;
else
return -1;
}
int readlines(char *lineptr[],int maxlines) //读取输入行
{
int len,nlines;
char *p,line[MAXLEN];
nlines=0;
while(len=getline(line,MAXLEN)>0) //输入字符大于MAXLEN
if(nlines>=maxlines||(p=alloc(len))==NULL) //行数过多或没有空间
return -1;
else
{
line[len-1]='\0'; //删除换行符
strcpy(p,line); //@
lineptr[nlines++]=p; //@
}
return nlines;
}
void writelines(char *lineptr[],int nlines) //写输入行
{
int i;
for(i=0;i<nlines;i++)
printf("%s\n",lineptr[i]);
}
void qsort(char *v[],int left,int right) //按递增顺序对v[left]-v[right]进行排序
{
int i,last;
if(left>=right) //如果数组元素的个数小于2,则返回
return ;
swap(v,left,(left+right)/2);
last=left;
for(i=left+1;i<=right;i++)
if(strcmp(v[i],v[left])<0)
swap(v,++last,i);
swap(v,left,last);
qsort(v,left,last-1);
qsort(v,left+1,last);
}
void swap(char *v[],int i,int j) //交换v[i]和v[j]
{
char *temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}


  • gyyts099
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
运行前把#define的数据改动一下运行会更好。。。


2026-01-27 16:40:46
广告
不感兴趣
开通SVIP免广告
  • gyyts099
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是对数组排序的程序,手动输入,输入的文本行可以长度不统一,并用指针指向他们,用快排排序。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 2回复贴,共1页
<<返回c语言吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示