/*
程序功能:从键盘接收字符串输入,然后以行为单位 转存至文件
         然后从文件中提取所录入的字符串  并有序输出至屏幕
		 单个字符长度不能超过255  
		 控制台录入以*****(5连*)作为结束标记
		 排序算法:冒泡
*/

#include <stdio.h>
#include<stdlib.h>
#include<string.h>


int main()
{    
	FILE *fp; 
	char str[256]={'\0'};
	char ** dstr=NULL;
	int cout=0;
	int i,j;
	char * tmp;
	if((fp=fopen("d:\\123.txt","w"))==NULL)
	{ 
		printf("打开文件失败!\n"); 
		return 0;
	} 
	//接受键盘输入并保存到指定文件
	while(1)
	{
		scanf("%s",str);
		if(strcmp(str,"*****")==0) break;   //人为限定为以5连*作为输入结束标记
		fprintf(fp,"%s\n",str);
		cout++;
	}
	//打开曾输入的字符串的文件,为排序输出做准备工作
	fclose(fp); 
	fp=fopen("d:\\123.txt","rb");
	if(fp==NULL)
	{ 
		printf("打开文件失败!\n"); 
		return 0;
	} 
	//为字符串分配空间
	dstr=(char**)malloc(cout*sizeof(char*));
	for(i=0;i<cout;i++) 
	{
		dstr[i] = (char *)malloc(sizeof(char)*256);
		memset(dstr[i],0,sizeof(dstr[i]));  
	}
	//从文件扫描到字符串指针
	for(i=0;i<cout;i++)
	{
		fscanf(fp,"%s",*(dstr+i));
	}
	//以下双循环是字符串排序部分
	for(i=0;i<cout;i++)
    {
        for(j=i;j<cout;j++)
        {
			
            if(strcmp(*(dstr+i),*(dstr+j))>0)
            {
                tmp=*(dstr+i);
                *(dstr+i)=*(dstr+j);
                *(dstr+j)=tmp;
            }

        }
    }
	//排序后输出
	printf("-------------------------\n");
	for(i=0;i<cout;i++)
	{
		printf("%s\n",*(dstr+i));

	}
	fclose(fp); 
	free(dstr);
	return 0;
}