当前位置: 首页 > article >正文

C //例10.3 从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。

C程序设计 (第四版) 谭浩强 例10.3

例10.3 从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。

IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。

 

代码块
方法:使用指针,函数的模块化设计,动态分配内存
说明:这里准备先写入的文件名称为Test.txt,文件已经存在于该项目目录下。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define M 3
#define N 80

//初始化所需变量
void initialVar(char ***str, int m, int n, char **name){
	*str = (char**)malloc(m * sizeof(char*));
	for(int i = 0; i < m; i++){
		(*str)[i] = (char*)malloc(n * sizeof(char));
	}
	*name = (char*)malloc(n * sizeof(char));
}

//输入字符串
void inputStr(char **str, int m){
	printf("Enter %d Strings:\n", m);
	for(int i = 0; i < m; i++){
		printf("Enter No.%d Strings: ", i + 1);
		gets(str[i]);
	}
	printf("\n");
}

//对字符串进行升序排列
void ascendingSortStr(char **str, int m, int n){
	char *temp = (char*)malloc(n * sizeof(char));
	for(char **p = str; p < str + m; p++){
		for(char **q = p + 1; q < str + m; q++){
			if(strcmp(*p, *q) > 0){
				strcpy(temp, *p);
				strcpy(*p, *q);
				strcpy(*q, temp);
			}
		}
	}
	free(temp);
}

//输入文件名称
void inputFileName(FILE **file, char *name){
	printf("Enter File Name: ");
	scanf("%s", name);

	*file = fopen(name, "r");
	if(*file == NULL){
		perror("Cannot open this file");
		system("pause");
		exit(0);
	}

	*file = fopen(name, "w+");
}

//将字符串写入文件
void inputFile(FILE **file, char **str, int m){
	for(int i = 0; i < m; i++){
		fputs(str[i], *file);
		fputs("\n", *file);
		printf("%s\n", str[i]);
	}

	fclose(*file);
	putchar(10);
}

//释放分配变量的内存
void freeVar(char ***str, int m, char **name){
	for(int i = 0; i < m; i++){
		free((*str)[i]);
	}
	free(*str);
	free(*name);
}

int main(){
	FILE *file = NULL;
	char **str = NULL;
	char *name = NULL;

	initialVar(&str, M, N, &name);
	inputStr(str, M);
	ascendingSortStr(str, M, N);
	inputFileName(&file, name);
	inputFile(&file, str, M);
	freeVar(&str, M, &name);

	system("pause");
	return 0;
}
运行结果如下:

在这里插入图片描述


http://www.kler.cn/news/160756.html

相关文章:

  • kali linux下可用的wine QQ/微信
  • html和css写淘宝的快速导航条
  • uni-app 微信小程序之自定义navigationBar顶部导航栏
  • 使用函数计算,数禾如何实现高效的数据处理?
  • 系统思考与啤酒游戏经营沙盘
  • Spring Cloud Stream 4.0.4 rabbitmq 发送消息多function
  • 数据库原理: 笛卡儿积
  • 天池SQL训练营(二)-SQL基础查询与排序
  • 用 C 写一个卷积神经网络
  • 2024 年 20 款最佳免费视频转换器软件 [安全快速有效]
  • 【头歌系统数据库实验】实验2 MySQL软件操作及建库建表建数据
  • c++函数模板STL详解
  • Office Tool Plus 使用教程 让个人也能轻松使用上免费的Office
  • 网上商城、宠物商城源码(Java)
  • Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍
  • MySQL五 | 事务
  • matlab 最小二乘拟合空间直线(方法二)
  • PyTorch 基础篇(1):Pytorch 基础
  • GNSEC 2022年第8届全球下一代软件工程线上峰会-核心PPT资料下载
  • linux里source、sh、bash、./有什么区别
  • AIGC: 关于ChatGPT中API接口调用相关准备工作
  • vue中shift+alt+f格式化防止格式掉其它内容
  • kubeadm 安装k8s1.28.x 底层走containerd 容器
  • Sprite Editor图片编辑器的使用_unity基础开发教程
  • Talk | UCSB博士生欧阳思琦: 利用词级别对比学习实现低资源下的语音翻译
  • [Geek Challenge 2023] web题解
  • [React]基于Antd的FormModal的组件封装以及useFormModal的hooks封装
  • 动态规划学习——最长回文子序列,让字符串变成回文串的最小插入次数
  • swiper和video实现抖音刷视频功能
  • P1005 [NOIP2007 提高组] 矩阵取数游戏