本文通过将文本文件中的字符串进行排序,给出一个基本分析问题,解决问题通用方法。希望通过解决一个简单问题(比如:字符串排序),让大家了解如何分析和解决类似研发中遇到的问题。
= 需求分析 =
将文本文件中的字符串按照 ASCII码进行排序。
= 功能分析 =
# 支持文件操作
# 支持字符排序
= 详细设计 =
* a) 文件读取:
int FILE_Read(char * file_name, char * buf, int size)
* b) 文件保存:
int FILE_Save(char * file_name, char * buf, int size)
* c) 字符排序:
int CHAR_Sort(char * buf, int size)
= 使用方法 =
* 第一步:读取文件,调用FILE_Read
* 第二步:字符排序,调用CHAR_Sort
* 第三步:排序结果输出到文件,调用FILE_Save
= 编码实现 =
#include <stdio.h>
//a) 文件读取: int FILE_Read(char * file_name, char * buf, int size)
int FILE_Read(char * file_name, char * buf, int size)
{
int ch, cnt;
FILE * fp = NULL;
if (NULL == file_name || NULL == buf)
{
return -1;
}
fp = fopen(file_name, "r");
if (NULL == fp)
{
return -2;
}
cnt = 0;
ch = fgetc(fp);
while(ch != EOF)
{
*(buf + cnt) = (char)ch;
cnt++;
//printf("char[%d] = %c\n", cnt, ch);
ch = fgetc(fp);
}
fclose(fp);
return cnt;
}
//b) 文件保存: int FILE_Save(char * file_name, char * buf, int size)
int FILE_Save(char * file_name, char * buf, int size)
{
int ret, cnt;
FILE * fp = NULL;
if (NULL == file_name || NULL == buf)
{
return -1;
}
fp = fopen(file_name, "w");
if (NULL == fp)
{
return -2;
}
cnt = 0;
while(cnt < size)
{
ret = fputc(*(buf + cnt), fp);
if (EOF == ret)
{
return -3;
}
cnt++;
}
fclose(fp);
return cnt;
}
//c) 字符排序: int CHAR_Sort(char * buf, int size)
int CHAR_Sort(char * buf, int size)
{
char ch;
int i, j;
for (i = size; i > 0; i--)
{
for (j = size -1; j > size - i; j--)
{
if ( *(buf + j) < *(buf + j - 1))
{
ch = *(buf + j);
*(buf + j) = *(buf + j - 1);
*(buf + j - 1) = ch;
}
else
{
// do nothing
}
}
}
return 0;
}
#define MAX_BUF 512
int main()
{
int ret, size;
char buf[MAX_BUF];
size = FILE_Read("a.in", buf, MAX_BUF);
if (0 > size)
{
printf("FILE_Read error! size = %d\n", size);
return size;
}
printf("FILE_Read size = %d\n", size);
ret = CHAR_Sort(buf, size);
printf("CHAR_Sort ret = %d\n", ret);
ret = FILE_Save("test1.out", buf, size);
printf("FILE_Save ret = %d\n", ret);
return 0;
}
= 功能测试 =
1) 输入“aghyckt” --> 输出“acghkty”
2) 输入“This is a 78903471 really combined test with digits and alphabet. 100 3000 489103476” --> 输出“ .000000011133344467778899Taaaaabbcdddeeeeghhhiiiiiilllmnnoprsssstttttwy”
3) 输入“8609835” --> 输出“0356889”
= 总结报告 =
知识点,涉及:
* 文件的打开、关闭、字符读取,字符保存操作
* 冒泡算法
* 问题的分析,归纳整理,和处理流程
* 详细设计
* C语言编码、调试能力
* 系统测试能力
= 参考资料 =
* C程序设计(第二版) 7-302-03806-06-6/TP.2205
本文介绍了一个简单的文本文件字符串排序程序,包括文件读取、字符排序和结果保存等功能。通过具体的编码实现,展示了从需求分析到功能测试的完整过程。
&spm=1001.2101.3001.5002&articleId=36618735&d=1&t=3&u=1af3de1777c544c1a29e93b4e858e66e)
5155

被折叠的 条评论
为什么被折叠?



