题意:
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
思路:strtok分割字符串
strtok的使用
函数名: strtok
功 能: 查找由在第二个串中指定的分界符分隔开的单词
用 法: char *strtok(char *str1, char *str2);
strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串(此时返回分割符前面的字符串),往后的调用则将参数s设置成NULL(返回分隔符后的字符串)。每次调用成功则返回被分割出片段的指针,当没有被分割的串时则返回NULL。
第一次输出 abc#include <string.h> #include <stdio.h> int main(void) { char input[16] = "abc,d"; char *p; /**//* strtok places a NULL terminator in front of the token, if found */ p = strtok(input, ","); if (p) printf("%s\n", p); /**//* A second call to strtok using a NULL as the first parameter returns a pointer to the character following the token */ p = strtok(NULL, ","); if (p) printf("%s\n", p); return 0; }
第二次输出 d
题目是按照5分割,然后保存的分割后的串,排序
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
char s[10000];
int b[10000];
int main()
{
while(scanf("%s",s) != EOF)
{
char *p;
int k = 0;
p = strtok(s,"5");
while(p != NULL)
{
sscanf(p,"%d",&b[k++]);
p = strtok(NULL,"5");
}
sort(b,b+k);
printf("%d",b[0]);
for(int i = 1; i < k; i++)
printf(" %d",b[i]);
printf("\n");
}
return 0;
}