简单开发过程介绍(C语言)

本文介绍了一个简单的文本文件字符串排序程序,包括文件读取、字符排序和结果保存等功能。通过具体的编码实现,展示了从需求分析到功能测试的完整过程。

本文通过将文本文件中的字符串进行排序,给出一个基本分析问题,解决问题通用方法。希望通过解决一个简单问题(比如:字符串排序),让大家了解如何分析和解决类似研发中遇到的问题。


= 需求分析 =



将文本文件中的字符串按照 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值