当前位置: 代码迷 >> C语言 >> [求助]解释一条语句(指针)
  详细解决方案

[求助]解释一条语句(指针)

热度:255   发布时间:2007-01-30 11:51:14.0
[求助]解释一条语句(指针)
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编辑过]

搜索更多相关的解决方案: 指针  语句  解释  

----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
  相关解决方案