/*
程序功能:从键盘接收字符串输入,然后以行为单位 转存至文件
然后从文件中提取所录入的字符串 并有序输出至屏幕
单个字符长度不能超过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;
}