微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 编写程序实现对输入的字符串排序(仅对alpha字符排序)

编写程序实现对输入的字符串排序(仅对alpha字符排序)

时间:11-22 来源:互联网 点击:

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

}

2)法2

#include

#include

#include

#include

#define NUMERIC 1

#define DECR 2

#define FOLD 4

#define DIR 8

#define MAXLINES 5000

#define MAXLEN 1000

#define MAXSTORAGE 10000

char *lineptr[MAXLINES];

char lines[MAXSTORAGE];

int foldcmp(char *, char *);

int numcmp(char *, char *);

int dircmp(char *, char *);

int folddircmp(char *, char *);

int p_realines(char *lineptr[], int maxlines);

void p_qsort(void *v[], int left, int right, int(*comp)(void *, void *));

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

static char option = 0;

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

{

int nlines;

int c, rc = 0;

while (--argc > 0 && (*++argv)[0] == -)

{

while (c = *++argv[0])

{

switch(c) {

case d:

option |= DIR;

case f:

option |= FOLD;

break;

case n:

option |= NUMERIC;

break;

case r:

option |= DECR;

break;

default:

printf("sort: illegal option %c\n", c);

argc = 1;

rc = -1;

break;

}

}

}

if (argc)

printf("Usage: sort -fnr\n");

else {

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

if (option & NUMERIC)

p_qsort((void **)lineptr, 0, nlines-1,(int (*)(void *, void *))numcmp);

else if ((option & (FOLD | DIR)) == 0x0c)

{

p_qsort((void **)lineptr, 0, nlines-1, (int (*)(void *, void *))folddircmp);

}

else if (option & FOLD)

p_qsort((void **)lineptr, 0, nlines-1,(int (*)(void *, void *))foldcmp);

else if (option & DIR)

p_qsort((void **)lineptr, 0, nlines-1, (int (*)(void *, void *))dircmp);

else

p_qsort((void **)lineptr, 0, nlines-1, (int (*)(void *, void *))strcmp);

p_writelines(lineptr, nlines, option & DECR);

} else {

printf("Input too big to sort!\n");

rc = -1;

}

}

system("pause");

return rc;

}

int foldcmp(char *s, char *t)

{

char a, b;

int fold = (option & FOLD) ? 1: 0;

do {

a = fold ? tolower(*s): *s;

s++;

b = fold ? tolower(*t): *t;

t++;

if (a == b && a == \0)

return 0;

} while (a == b);

return a - b;

}

int dircmp(char *s, char *t)

{

char a, b;

int dir = (option & DIR) ? 1: 0;

do {

if (dir) {

while (!isalnum(*s) && *s != && *s != \0)

s++;

while (!isalnum(*t) && *t != && *t != \0)

t++;

}

if (a == b && a == \0)

return 0;

} while (a == b);

return a - b;

}

int folddircmp(char *s, char *t)

{

char a, b;

int fold = (option & FOLD) ? 1 : 0;

int dir = (option & DIR) ? 1 : 0;

do {

if (dir) {

while (!isalnum(*s) && *s != && *s != \0)

s++;

while (!isalnum(*t) && *t != && *t != \0)

t++;

}

a = fold ? tolower(*s): *s;

s++;

b = fold ? tolower(*t): *t;

t++;

if (a == b && a == \0)

{

return 0;

}

} while (a == b);

return a - b;

}

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

{

int len, nlines;

char *p = lines, line[MAXLEN];

nlines = 0;

printf("Please input a string(# to end input): ");

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

{

if (strcmp(line, "#\n") == 0)

break;

if (nlines >= maxlines || p + len >= lines + MAXSTORAGE)

return -1;

else {

line[len - 1] = \0;

strcpy(p, line);

lineptr[nlines++] = p;

p += len;

}

printf("Please input a string(# to end input): ");

}

return nlines;

}

void p_writelines(char *lineptr[], int nlines, int order)

{

int i;

if (order)

for (i = nlines -1; i >= 0; i--)

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

else

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

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

printf("\n");

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top