解题思路:为解决问题,可分为三个步骤:
从键盘读入n个字符串,存放在一个二维字符数组中,每一个一维数组存放一个字符串;
对字符数组中的n个字符串按字母顺序排序,排好序的字符串仍存放在字符数组中;
从键盘读入n个字符串,存放在一个二维字符数组中,每一个一维数组存放一个字符串;
对字符数组中的n个字符串按字母顺序排序,排好序的字符串仍存放在字符数组中;
将字符数组中的字符串顺序输出。
说明:
fgets函数的函数原型为:
char *fgets (char *str,int n,FILE *fp);
其作用是从文件读入一个字符串
调用时可以写成:
fgets(str,n,fp);
fgets(str,n,fp);中n是要求得到的字符个数,但实际上只读n-1个字符,然后在最后加一个’\0’字符,这样得到的字符串共有n个字符,把它们放到字符数组str中
如果在读完n-1个字符之前遇到换行符“\n”或文件结束符EOF,读入即结束,但将所遇到的换行符“\n”也作为一个字符读入
执行fgets成功,返回str数组首地址,如果一开始就遇到文件尾或读数据错,返回NULL
fputs函数的函数原型为:
int fputs (char *str, FILE *fp);
str指向的字符串输出到fp所指向的文件中
调用时可以写成: fputs(″China”,fp);
fputs函数中第一个参数可以是字符串常量、字符数组名或字符型指针
字符串末尾的′\0′不输出
输出成功,函数值为0;失败,函数值为EOF
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{ FILE *fp;
char str[3][10],temp[10]; // str是用来存放字符串的二维数组,temp是临时数组
int i,j,k,n=3;
printf("Enter strings:\n"); // 提示输入字符串 */
for(i=0;i<n;i++)
gets(str[i]); // 输入字符串
for(i=0;i<n-1;i++) // 用选择法对字符串排序
{k=i;
for(j=i+1;j<n;j++)
if(strcmp(str[k],str[j])>0) k=j;
if(k!=i)
{strcpy(temp,str[i]);
strcpy(str[i],str[k]);
strcpy(str[k],temp);}
}
if((fp=fopen("D:\\CC\\string.dat","w"))==NULL) // 打开磁盘文件
{
printf("can't open file!\n");
exit(0);
}
printf("\nThe new sequence:\n");
for(i=0;i<n;i++)
{fputs(str[i],fp);fputs("\n",fp); // 撤号
printf("%s\n",str[i]); // 在屏幕上显示字符串
}
return 0;
}