题目链接 https://www.jisuanke.com/course/1797/171534
题解:写一个排序函数cmp,然后调用内置的sort函数排序即可
写cmp的话就用sscanf函数处理,每次输入各一个整数比较,一样的话指针后移继续比较,具体思路看代码
注意:自己写的cmp(x,y)函数返回值含义是x是否小于y,不是x-y的值,要是返回的是x-y的值,有一半的数据会挂
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Node {
char ch[120];
} node[120];
int n;
bool cmp(Node x,Node y) {
int x1,x2;
int p1,p2;
p1 = p2 = 0;
while(true) {
sscanf(x.ch+p1,"%d",&x1);
sscanf(y.ch+p2,"%d",&x2);
if(x1!=x2) return x1<x2;
while(x.ch[p1]!='.'&&x.ch[p1]!=0) p1++;
while(y.ch[p2]!='.'&&y.ch[p2]!=0) p2++;
if(x.ch[p1]=='.'&&y.ch[p2]=='.') {
p1++;
p2++;
} else if(x.ch[p1]=='.'&&y.ch[p2]!='.'){
return false;
} else if(x.ch[p1]!='.'&&y.ch[p2]=='.') {
return true;
} else {
return false;
}
}
}
int main() {
scanf("%d",&n);
for(int i = 1;i <= n;i++) {
scanf("%s",&node[i].ch);
}
sort(node+1,node+1+n,cmp);
for(int i = 1;i <= n;i++) {
printf("%s\n",node[i].ch);
}
return 0;
}