字符串处理+排序
排序直接用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
*/