第二個字符串排序功能,你自己實現
程序代码:
/*
來源: http://bbs.bccn.net/thread-460816-1-1.html
題目要求:
(1) 实现函数char ** readWords(int n),用于从键盘读取n个单词,保存在动态申请
的字符数组中,字符数组首地址保存在动态申请的指针数组中。返回指针数组首
元素的地址。
(2) 实现函数void sort(char * * ptr, int size,int * minlenPtr,int * maxlenPtr),
用于对单词按照长度的从小到大顺序进行排序,并将单词的最短长度和最长长度分别
写入minlenPtr和maxlenPtr指向的整形变量中。
(3) 实现函数void output(char ** ptr,int size),用于输出单词
(4) 实现函数void freeMemory(char ** ptr,int size),用于释放动态申请的内存,包
括指针数组和字符数组的内存空间。
様例:
Please input the words:
Where↙
there↙
is↙
hope↙
a↙
way↙
Min length is 1 and max length is 5
After sort,the words are:
a
is
way
hope
Where
there
作者: TonyDeng
日期: 2016.01.04.
編譯: VC++14 in VS2015
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
// 預定義每個單詞不包含結束字符的最大字符數
// 註:1.不建議使用傳統的#define宏
// 2.建議使用新的size_t類型
const size_t MAX_WORD_LENGTH = 80;
/*
功能:
实现函数char ** readWords(int n),用于从键盘读取n个单词,保存在动态申请
的字符数组中,字符数组首地址保存在动态申请的指针数组中。返回指针数组首
元素的地址。
註: 1.不考慮內存申請失敗情形
2.假定輸入的n在合理數値範圍內
*/
char ** readWords(int n)
{
char ** pBuffer = (char**)calloc(n, sizeof(char*));
if (!pBuffer)
{
return NULL;
}
for (int i = 0; i < n; ++i)
{
pBuffer[i] = (char*)calloc(1, MAX_WORD_LENGTH + 1); // 注意可能遇到申請失敗的情形!
if (pBuffer[i])
{
scanf_s("%s", pBuffer[i], MAX_WORD_LENGTH);
}
}
return pBuffer;
}
// 功能: 輸出數組數據
void output(char ** ptr, int size)
{
for (int i = 0; i < size; ++i)
{
printf_s("%s\n", ptr[size]);
}
}
// 功能: 釋放內存
void FreeMemory(char ** ptr, int size)
{
for (int i = 0; i < size; ++i)
{
free(ptr[i]);
}
free(ptr);
}
int main(void)
{
int number = 0;
do
{
printf_s("Input n: ");
rewind(stdin);
} while (scanf_s("%d", &number) != 1);
printf_s("Input text:\n");
char ** data = readWords(number);
if (data)
{
printf_s("\nYour input is:\n");
output(data, number);
FreeMemory(data, number);
}
printf_s("\nPress any key to continue...");
_getch();
return EXIT_SUCCESS;
}
[此贴子已经被作者于2016-1-4 18:34编辑过]