| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 542 人关注过本帖
标题:[求助]解释一条语句(指针)
只看楼主 加入收藏
hypoui
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-1-30
收藏
 问题点数:0 回复次数:2 
[求助]解释一条语句(指针)
a program that will sort a set of text lines into alphabetic order

The input routine has to collect and save the characters of each line, and build an array of pointers to the lines. It will also have to count the number of input lines, since that information is needed for sorting and printing. Since the input function can only cope with a finite number of input lines, it can return some illegal count like -1 if too much input is presented.
The output routine only has to print the lines in the order in which they appear in the array of pointers.

#include <stdio.h>
#include <string.h>
#define MAXLINES 5000 /* max #lines to be sorted */
char *lineptr[MAXLINES]; /* pointers to text lines */
int readlines(char *lineptr[], int nlines);
void writelines(char *lineptr[], int nlines);
void qsort(char *lineptr[], int left, int right);
/* sort input lines */
main()
{
int nlines; /* number of input lines read */
if ((nlines = readlines(lineptr, MAXLINES)) >= 0) {
qsort(lineptr, 0, nlines-1);
writelines(lineptr, nlines);
return 0;
} else {
printf("error: input too big to sort\n");
return 1;
}
}


#define MAXLEN 1000 /* max length of any input line */
int getline(char *, int);
char *alloc(int);
/* readlines: read input lines */
int readlines(char *lineptr[], int maxlines)
{
int len, nlines;
char *p, line[MAXLEN];
nlines = 0;
while ((len = getline(line, MAXLEN)) > 0)
if (nlines >= maxlines || p = alloc(len) == NULL)
return -1;
else {
line[len-1] = '\0'; /* delete newline */

strcpy(p, line);
lineptr[nlines++] = p;
}
return nlines;
}



/* writelines: write output lines */
void writelines(char *lineptr[], int nlines)
{
int i;
for (i = 0; i < nlines; i++)
printf("%s\n", lineptr[i]);
}


/* qsort: sort v

...v[align=right] into increasing order */
void qsort(char *v[], int left, int right)
{
int i, last;
void swap(char *v[], int i, int j);
if (left >= right) /* do nothing if array contains */
return; /* fewer than two elements */
swap(v, left, (left + right)/2);
last = left;
for (i = left+1; i <= right; i++)
if (strcmp(v[i], v[align=left]) < 0)
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last-1);
qsort(v, last+1, right);
}



/* swap: interchange v[i] and v[j] */
void swap(char *v[], int i, int j)
{
char *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
其中加粗的这行在这里怎么理解,line[len-1] = '\0'; /* delete newline */?
这个程序用来将输入的字符串以字母顺序排列,是c programming language课本中的例子。
[align=right][此贴子已经被作者于2007-1-30 14:50:57编辑过]

搜索更多相关主题的帖子: 指针 语句 解释 
2007-01-30 11:51
huawang99
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2007-1-28
收藏
得分:0 

就是表示该到达数组最后一个元素,'\0'是数组的结束符号.


2007-01-30 13:31
hypoui
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-1-30
收藏
得分:0 

那这里注释为什么是/delete newline/,不明白

2007-01-30 14:50
快速回复:[求助]解释一条语句(指针)
数据加载中...
 
   



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

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