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;
}
运行结果如下:

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-10 00:32:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-10 00:32:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-10 00:32:02       82 阅读
  4. Python语言-面向对象

    2023-12-10 00:32:02       91 阅读

热门阅读

  1. MySQL注入入门简述

    2023-12-10 00:32:02       54 阅读
  2. CCF计算机软件能力认证考试—202209-1如此编码

    2023-12-10 00:32:02       39 阅读
  3. 高云GW1NSR-4C开发板上手使用

    2023-12-10 00:32:02       71 阅读
  4. 【Qt5】setWindowFlags的标志有哪些?

    2023-12-10 00:32:02       46 阅读
  5. 车联网安全学习路标

    2023-12-10 00:32:02       61 阅读
  6. 如何访问内部网络做内网穿透

    2023-12-10 00:32:02       59 阅读
  7. GO设计模式——7、适配器模式(结构型)

    2023-12-10 00:32:02       50 阅读
  8. VueUse工具库

    2023-12-10 00:32:02       74 阅读
  9. string类的常用方法

    2023-12-10 00:32:02       62 阅读
  10. C++知识点总结(8):尺取法

    2023-12-10 00:32:02       55 阅读
  11. go-factory工厂模式样例

    2023-12-10 00:32:02       55 阅读