|
发表于 2012-4-10 16:55:50
|
显示全部楼层
本帖最后由 haye123 于 2012-4-10 16:58 编辑
我用了差不多1小时半写的.
半年没有写过,可能有些地方会出错.
不知道能不能帮到你!:L
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- #define STRING_SIZE 100
- #define SM_SIZE sizeof(struct StringMember)
- struct StringMember
- {
- char szString[STRING_SIZE];
- int dwNumber;
- struct StringMember * lpNext;
- };
- typedef struct StringMember stSM;
- stSM * Input(void);
- void Arrangement(char * lpString);
- stSM * Output(stSM * head);
- stSM * SaveFile(stSM * head);
- void ReleaseMemory(stSM * head);
-
- void main()
- {
- ReleaseMemory(SaveFile(Output(Input())));
- system("pause");
- }
- stSM * Input(void)
- {
- int i=0;
- stSM * head,* p1,* p2;
- printf("输入若干个字符串(结束输入EOF,回车键确定).按照ASCII码表顺序输出.\n");
- printf("提醒:字符串长度 <= %d字节,输入一次EOF没有结束,请再次输入EOF.\n\n",STRING_SIZE);
- head = p1 = p2 = (stSM *) malloc (SM_SIZE);
- printf("第 %d 个字符串: ",i+1);
- while(scanf("%s",p1->szString) != EOF)
- {
- p2=p1;
- p1->dwNumber=++i;
- Arrangement(p1->szString);
- p1=(stSM *) malloc (SM_SIZE);
- p2->lpNext=p1;
- printf("\n第 %d 个字符串: ",i+1);
- }
- if(!i)
- {
- printf("\n@_@:没有发现1个(或以上)的字符串,程序强制结束!\n\n");
- free(head);
- exit(0);
- }
- p2->lpNext=NULL;
- return(head);
- }
- stSM * Output(stSM * head)
- {
- stSM * p1;
- p1=head;
- printf("\n\n按照ASCII码表顺序如下:\n");
- while(p1)
- {
- printf("\n\n排列后字符串 %d 如下:\n",p1->dwNumber);
- printf("%s",p1->szString);
- p1=p1->lpNext;
- }
- fputc(10,stdout);
- fputc(10,stdout);
- return(head);
- }
- stSM * SaveFile(stSM * head)
- {
- FILE * fp;
- stSM * p1;
- char temp,FileName[STRING_SIZE];
- printf("\n\n是否把已排序的字符串保存在文件?\n(Y/y or N/n): ");
- SSS: temp=getchar();
- if(temp == 'n' || temp == 'N')
- {
- return(head);
- }
- else if(!(temp == 'y' || temp == 'Y'))
- {
- printf("输入错误:(Y或y为需要保存到文件中,N或n则不保存!,请重新输入!\n\n(Y/y or N/n):");
- getchar();
- goto SSS;
- }
- printf("\n\n输入文件名字(例如:Name.txt):");
- scanf("%s",FileName);
- if(!(fp=fopen(FileName,"w+")))
- {
- printf("\n\n无法创建 %s 该文件,程序自动退出!\n",FileName);
- exit(0);
- }
- p1=head;
- while(p1)
- {
- fprintf(fp,"第 %d 次字符串处理后结果:",p1->dwNumber);
- fputs(p1->szString,fp);
- fputc(10,fp);
- fputc(10,fp);
- p1=p1->lpNext;
- }
- fclose(fp);
- printf("\n\n温馨提醒:以上排序后的字符串内容已经保存在 %s 文件中,\n请在程序当前目录查找!\n\n",
- FileName);
- return(head);
- }
- void ReleaseMemory(stSM * head)
- {
- stSM * p1;
- printf("\n程序正在退出,请稍等....-_- .zZ\n草..程序太啰嗦了\n\n");
- while(head)
- {
- p1=head->lpNext;
- free(head);
- head=p1;
- }
- return;
- }
- void Arrangement(char * lpString)
- {
- char temp;
- int i,j;
- for(i=0;* (lpString+i) !=0 ;i++)
- {
- for(j=1;* (lpString+j) != 0;j++)
- {
- if(*(lpString+j-1) > * (lpString+j) )
- {
- temp = * (lpString+j-1);
- * (lpString+j-1) = * (lpString+j);
- * (lpString+j) = temp;
- }
- }
- }
- return;
- }
复制代码 |
|