c语言right 函数报错,兄弟们,帮忙看看

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#define _CRT_SECURE_NO_WARNINGS 1

#include

#include

#define MAXLINES 5000

char *lineptr[MAXLINES];

int readlines(char *lineptr[], int nlines);

void qsort(void *lineptr[], int left, int right,

int (*comp)(void *, void *));

int numcmp(char *, char *);

void writelines(char *lineptr[], int nlines);

int main(int argc, char *argv[])

{

int nlines;

int numeric = 0;

if (argc > 1 && strcmp(argv[1], "-n") == 0)

numeric = 1;

if ((nlines = readlines(lineptr, MAXLINES)) >= 0) {

qsort((void **)lineptr, 0, nlines - 1,

(int (*)(void *, void *))(numeric ? numcmp : strcmp));

writelines(lineptr, nlines);

return 0;

}

else {

printf("input too big to sort\n");

return 1;

}

}

#define MAXLEN 1000

int getline(char *, int);

char *alloc(int);

int readlines(char *lineptr[], int maxlines)

{

int nlines = 0, len;

char line[MAXLEN];

char *p;

while ((len = getline(line, MAXLEN)) > 0)

if (nlines >= maxlines || (p = alloc(len)) == NULL)

return -1;

else {

line[len - 1] = '\0';

strcpy(p, line);

lineptr[nlines++] = p;

}

return nlines;

}

#define BUFSIZE 10000

char buf[BUFSIZE];

char *bufp = buf;

char *alloc(int len)

{

if (bufp + len > buf + BUFSIZE)

return NULL;

else {

bufp += len;

return bufp - len;

}

}

int getline(char *s, int lim)

{

char *t = s;

int c;

while (--lim > 0 && (c = getchar()) != EOF && c != '\n')

*s++ = c;

if (c == '\n')

*s++ = c;

*s = '\0';

return s - t;

}

void qsort(void *v[], int left, int right,

int(*comp)(void *, void *)) {

int i, last;

void swap(void *v[], int i, int j);

if (left >= right)

return;

swap(v, left, (left + right) / 2);

last = left;

for (i = left + 1; i <= right; i++)

if ((*comp)(lineptr[i], lineptr[left]) < 0)

swap(v, ++last, i);

swap(v, left, last);

qsort(v, left, last - 1, comp);

qsort(v, last + 1, right, comp);

}

void swap(void *v[], int i, int j)

{

void * temp;

temp = v[i];

v[i] = v[j];

v[j] = temp;

}

#include

int numcmp(char *s1, char *s2)

{

double v1, v2;

v1 = atof(s1);

v2 = atof(s2);

if (v1 < v2)

return -1;

else if (v1 == v2)

return 0;

else

return 1;

}

void writelines(char *lineptr[], int nlines)

{

int i;

for (i = 0; i < nlines; i++)

printf("%s\n", lineptr[i]);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值