input.txt
6
Japan
USA
China
Germany
England
India
main.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
// 读åæ件å½æ°
char* read(char* acDirAndFileName)
{
FILE* pFile = fopen(acDirAndFileName, "rb");
if(pFile == NULL)
{
printf("read() å½æ°æ¥éï¼æ件读å失败ï¼è¯¥æ件为ï¼%s\n", acDirAndFileName);
return NULL;
}
fseek(pFile, 0, SEEK_END);
int iByteNum = ftell(pFile);
rewind(pFile);
char* acFile = (char*)malloc(iByteNum + 1);
fread(acFile, 1, iByteNum, pFile);
acFile[iByteNum] = '\0';
fclose (pFile);
return acFile;
}
// å¤æå符串æ¯ä¸æ¯æ´æ°ï¼å°äº '9' å¤§äº '0' çå符ï¼ï¼å¦æä¸æ¯è¿å0ï¼å¦ææ¯ï¼è¿åæå 个è¿æ ·çå符ã
int isInt(char* acStr)
{
int iSize = 0;
if(acStr[0] >= '0' && acStr[0] <= '9')
{
iSize ++; acStr ++;
while(acStr[0] >= '0' && acStr[0] <= '9') {iSize ++; acStr ++;}
}
return iSize;
}
// å¤æå符串æ¯ä¸æ¯ä¸æ´è¡å符ï¼å¦æä¸æ¯è¿å0ï¼å¦ææ¯ï¼è¿åæå 个è¿æ ·çå符ã
int isStrLine(char* acStr)
{
int iSize = 0;
if(acStr[0] != '\n' && acStr[0] != '\r')
{
iSize ++; acStr ++;
while(acStr[0] != '\n' && acStr[0] != '\r') {iSize ++; acStr ++;}
}
return iSize;
}
// å符串转æ´å
int strToInt(char* acStr, int iSize)
{
int i, iIndex = 0, iNum = 0;
if(acStr[0] < '0' || acStr[0] > '9')
iIndex = 1;
for(i=iIndex; i<iSize; i++)
iNum += (int)pow(10, iSize - i - 1) * (acStr[i] - 48);
if(acStr[0] == '-')
iNum = - iNum;
return iNum;
}
// å符串æ¯è¾
_Bool comStr(char* acStrA, char* acStrB)
{
int i, iSize, iA = strlen(acStrA), iB = strlen(acStrB);
iSize = (iA > iB)?(iA):(iB);
for(i=0; i<iSize; i++)
{
if(acStrA[i] == acStrB[i])
continue;
else if(acStrA[i] < acStrB[i])
return 0;
else
return 1;
}
return 1;
}
// å泡æåº
void bubbleSort(char** ppcArray, int iSize)
{
char* acMin;
int i, j, iIndex;
for(i=0; i<iSize - 2; i++)
{
// æ¾å°æå°çå符串
acMin = ppcArray[i];
for(j=i+1; j<iSize; j++)
{
if(comStr(acMin, ppcArray[j]) == 1)
{
acMin = ppcArray[j];
iIndex = j;
}
}
// å泡
for(j=iIndex; j>i; j--)
ppcArray[j] = ppcArray[j - 1];
ppcArray[i] = acMin;
}
}
// 交æ¢æ大æåº
void swapSort(char** ppcArray, int iSize)
{
char* acMax; char* acSwap;
int i, j, iIndex;
for(i=1; i<iSize; i++)
{
// æ¾å°æ大çå符串
acMax = ppcArray[iSize - i];
for(j=iSize-i-1; j>=0; j--)
{
if(comStr(acMax, ppcArray[j]) == 0)
{
acMax = ppcArray[j];
iIndex = j;
}
}
// ææ大çå符串交æ¢å°åºé¨
acSwap = ppcArray[iSize - i];
ppcArray[iSize - i] = acMax;
ppcArray[iIndex] = acSwap;
}
}
int main(void)
{
// 读åæ件å符串
char* pcStr = read("input.txt");
//printf("%s\n", pcStr);
int i, j, iSize, iNum, iIndex;
char* pcStrA;
// è·åæ件å¼å¤´çæ°å
for(pcStrA=pcStr; pcStrA[0] != '\0'; pcStrA++)
{
iSize = isInt(pcStrA);
if(iSize != 0)
break;
}
iNum = strToInt(pcStrA, iSize);
//printf("%d\n", iNum);
// å建äºçº§æéåé
å
å空é´
char** ppcArray = (char**)malloc(sizeof(char**)*(iNum + 1));
ppcArray[iNum] = NULL;
// è·³è¿æ件å¼å¤´çæ°å
pcStrA=pcStr + iSize;
// 为æéæ°ç»çå
ç´ åé
å
å空é´ï¼å¹¶ææ件å符串ä¸çæ¯è¡å符串ï¼å¤å¶å°æéæ°ç»çå
ç´ æåç空é´
iIndex = 0;
for(; pcStrA[0] != '\0'; pcStrA++)
{
iSize = isStrLine(pcStrA);
if(iSize != 0)
{
ppcArray[iIndex] = (char*)malloc(iSize + 1);
ppcArray[iIndex][iSize] = '\0';
for(i=0; i<iSize; i++)
ppcArray[iIndex][i] = pcStrA[i];
iIndex ++;
pcStrA += iSize;
}
}
iSize = iIndex;
// å泡æåº
//bubbleSort(ppcArray, iSize);
// 交æ¢æ大æåº
swapSort(ppcArray, iSize);
// æå°æåºç»æ
for(i=0; i<iSize; i++)
printf("%s\n", ppcArray[i]);
// éæ¾å符串æ°ç»çå
å空é´
for(i=0; i<iSize; i++)
free(ppcArray[i]);
free(ppcArray);
// éæ¾è¯»åæ件çå
å空é´
free(pcStr);
return 0;
}
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/1b4c510fd9f9d72aa97c5f85d82a2834349bbb0a?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)