題目
* 題目:將輸入的容量進行排序
* 輸入描述:先輸入磁盤的數量,然後依次輸入磁盤的容量
* 輸出描述:將輸入的磁盤容量排序
* 輸入示例:
* 3
* 2T
* 5G
* 3M
* 輸出示例:
* 3M
* 5G
* 2T
測試代碼
/*--------------------------------------------------------
* 題目:將輸入的容量進行排序
* 輸入描述:先輸入磁盤的數量,然後依次輸入磁盤的容量
* 輸出描述:將輸入的磁盤容量排序
* 輸入示例:
* 3
* 2T
* 5G
* 3M
* 輸出示例:
* 3M
* 5G
* 2T
*-------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define DISK_NUM 100 /* 最多可以容納的磁盤數量 */
#define BUF_SIZE 128
#define DEBUG
int g_disk_num = 0;
/* 定義相應的結構體 */
typedef struct disk_data
{
char disk_info[BUF_SIZE];
long long disk_size;
}DISK_T;
/* 將相應的容量換算成數字 */
int convert_to_num(DISK_T* src)
{
char tmp_buf[BUF_SIZE];
int num_mul=0;
if(NULL == src)
{
#ifdef DEBUG
printf("[Error]:input is null!Func:%s Line:%d\n",__FUNCTION__,__LINE__);
#endif
return -1;
}
memset(tmp_buf,0,sizeof(tmp_buf));
memcpy(tmp_buf,src->disk_info,strlen(src->disk_info)-1);
#ifdef DEBUG
printf("[Debug]:disk number=%s\n",tmp_buf);
#endif
switch(src->disk_info[strlen(src->disk_info)-1])
{
case 'm':
case 'M':
num_mul = 1;
break;
case 'g':
case 'G':
num_mul = 1024;
break;
case 't':
case 'T':
num_mul = 1024*1024;
break;
case 'p':
case 'P':
num_mul = 1024*1024*1024;
break;
default:
return -1;
break;
}
src->disk_size = (long long)atoi(tmp_buf) * num_mul;
#ifdef DEBUG
printf("[提示]:轉換成數字爲:%lld\n",src->disk_size);
#endif
return 0;
}
void disk_sort(DISK_T* src)
{
int i,j;
DISK_T tmp;
if(NULL == src)
{
#ifdef DEBUG
printf("[Error]:input is null!Func:%s Line:%d\n",__FUNCTION__,__LINE__);
#endif
return;
}
/* 冒泡排序,將結構體置換 */
for(i=0;i<g_disk_num;i++)
{
for(j=i;j<g_disk_num;j++)
{
if( ((src+i)->disk_size) > ((src+j)->disk_size)) /* >:升序 <:降序 */
{
memset(&tmp,0,sizeof(DISK_T));
#ifdef DEBUG
printf("[提示]:i->size=%lld j->size=%lld\n",(src+i)->disk_size,(src+j)->disk_size);
#endif
memcpy(&tmp,src+i,sizeof(DISK_T));
memcpy(src+i,src+j,sizeof(DISK_T));
memcpy(src+j,&tmp,sizeof(DISK_T));
}
}
}
}
int main()
{
int disk_num = 0;
int i = 0;
DISK_T disk_buf[DISK_NUM];
memset(disk_buf,0,sizeof(DISK_T)*DISK_NUM);
#ifdef DEBUG
printf("[提示]:輸入硬盤的數量:");
#endif
scanf("%d",&disk_num);
g_disk_num = disk_num;
while(disk_num)
{
#ifdef DEBUG
printf("[提示]:請輸入第%d個硬盤的容量:",disk_num-1);
#endif
scanf("%s",disk_buf[disk_num-1].disk_info);
convert_to_num(&disk_buf[disk_num-1]);
disk_num --;
}
disk_sort(disk_buf);
for(i=0;i<g_disk_num;i++)
{
#ifdef DEBUG
printf("第%d塊硬盤容量:%s\n",i,disk_buf[i].disk_info);
#else
printf("%s\n",disk_buf[i].disk_info);
#endif
}
}
測試描述
注意事項
注意輸入的字符串需要轉換後進行排序比較。