一个被sort与qsort折磨泪流满面的人。。。
有一个问题是这样问的:给出一个100位以内的数字,在仅允许相邻位互换(0位除外)的情况下,使该数字变得最大,如1012400189,交换后得出1042100981我的师兄用C++写了一个,我用C语言写了一个,感觉两份似乎并没有差别,可是我的就是不对,师兄的试了很多次,都是对的。。。废话不多说,上代码,求指教~~
师兄的C++版本(对的)
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
bool cmp(char str1, char str2)
{
return str1 > str2;
}
int main()
{
int caseNum;
int caseCount = 0;
string number;
cin >> caseNum;
while (caseCount < caseNum)
{
cin >> number;
for (int i = 0; i < number.length(); i++)
{
if (number[i] != '0')
{
int startSortIndex = i;
int sortIndexCount;
while (true)
{
if (i > number.length() - 1 || number[i] == '0')
break;
else
{
i++;
}
}
sort(number.begin() + startSortIndex, number.begin() + i, cmp);
}
}
cout << number << endl;
caseCount++;
}
}
我的C语言版本(错的)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void*a,const void*b)
{
return ((int)*(char *)b-(int)*(char *)a);
}
int main()
{
char ch[200];
int n;
int num;
int i;
int beg;
scanf("%d%*c",&n);
while(n--)
{
gets(ch);
num=strlen(ch);
for(i=0;i<num;i++)
{
if(ch[i]!='0')
{
beg=i;
while(1)
{
if(i>num-1||ch[i]=='0')
break;
else
i++;
}
qsort(ch+beg,i-beg,sizeof(ch[0]),cmp);
}
}
printf("%s\n",ch);
}
return 0;
}
想了两天都没有想出来。。。