Peck Chen

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

字符串处理+排序

排序直接用stdlib.h中的qsort()了

qsort(void *base, size_t num, size_t width, int (__fileDECL *comp)(const void *, const void *));

*comp函数要自己写(排序规则)

 

int *atoi(const char *str);

将字符串str转换成整型数

字符串中第一个字符可以是+、-

第一个字符合法后就开始做类型转换遇到(非数字字符和'\0')结束

第一个字符不合法,函数默认返回0

 

extern char *strtok(char *str, char *dilimiter);

就不知道怎么说了,模仿了会用而已...T.T

第一次调用时第一个参数是字符串首地址,第二次调用时第一个参数是NULL

第二个参数是要分隔的字符串, 开始直接传字符进去了,悲剧了...

 

2010-12-26  17:06:57  Accepted  1106  0MS  208K  1072 B  C  Y

代码
#include <stdio.h>
#include
<stdlib.h>
#include
<string.h>
#define N 1010

void deal_data(char *str, int *num, int *len); /* 转换成整型数组 */
int sort_function(const void *a, const void *b); /* 排序规则 */
void print(int *num, int len); /* 输出 */

int main()
{
char str[N];
int num[N], len;

while (scanf("%s", str) != EOF)
{
memset(num,
0, sizeof(num));
deal_data(str, num,
&len);
qsort(num, len,
sizeof(int), sort_function);
print(num, len);
}

return 0;
}

void print(int *num, int len)
{
int i;

for (i = 0; i < len; i++)
{
printf(i
? " %d":"%d", num[i]);
}
putchar(
'\n');
}

int sort_function(const void *a, const void *b)
{
return *((int *)a) - *((int *)b);
}

void deal_data(char *str, int *num, int *len)
{
int i, s_len, n_len, value;
char index, *ptr;

n_len
= 0;
ptr
= strtok(str, "5");
num[n_len
++] = atoi(ptr);
while (ptr = strtok(NULL, "5"))
{
num[n_len
++] = atoi(ptr);
}
*len = n_len;
}

 

/*
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的
若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,
除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。

Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),
这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。

Output
对于每个测试用例,输出分割得到的整数排序的结果,
相邻的两个整数之间用一个空格分开,每组输出占一行。

Sample Input
0051231232050775

Sample Output
0 77 12312320
*/

 

posted on 2010-12-26 17:50  PeckChen  阅读(302)  评论(0编辑  收藏  举报