20200502_将一组数据排序后输出到文件5

20200502_将一组数据排序后输出到文件5

每日小知识

在使用ifstream读取文件时没有使用try…catch,而是使用了if…else,这是因为文件不存在时ifstream返回空,但try…catch获取不到任何东西。

一、相关术语

对之前的代码进行整理,贴上完整代码。

二、笔试题(完整代码)

1、将文件中的一组数字排序后输出到另一文件中去。
答:首先假设输入文件为【input_file.txt】,里面内容为一组整型数字【1 38 3 9 1】。输出文件名为【output_file.txt】。统一保存路径为【D:\】。程序名为【sort_file.cpp】

// sort_file.cpp : 将读取到的数字排序后写入到新文件。
// 更新时间:2020-5-2 17:22:28。

#include "pch.h"	//vs2017默认头文件
#include 
#include 
#include 
#include 

void BubbleSort(std::vector& data);
bool ReadDataFile(std::vector& _outData);
bool WriteDataFile(std::vector& _outData);

int main()
{
	std::vector iArray;	// 文本内容{ 1, 38, 3, 9, 1 };
	ReadDataFile(iArray);
	BubbleSort(iArray);
	WriteDataFile(iArray);
    std::cout << "Hello World!\n"; 
}

void BubbleSort(std::vector& data)
{
	int iCount = data.size();
	bool bSort = false;

	for (int i = 0; i < iCount; i++)
	{
		for (int j = 0; j < iCount - i - 1; j++)
		{
			if (data[j] > data[j + 1])
			{
				int iTmp = data[j];
				data[j] = data[j + 1];
				data[j + 1] = iTmp;
			}
			bSort = true;
		}
		if (!bSort)
		{
			break;
		}
	}//end for1

}//end BubbleSort

//读取数据,解析,存入vector
bool ReadDataFile(std::vector& _outData)
{
	_outData.clear();
	const char szFile[] = "input_file.txt";	//文件名
	//ifsteam
	bool bRet = true;
	std::ifstream ioRead;
	const int kBUFSIZE = 20;
	char szBUF[kBUFSIZE] = { 0 };

	ioRead.open(szFile);	//文件不存在ioRead为空
	if (ioRead)
	{
		bRet = true;
		//	ioRead >> szBUF;读取一个字节
		ioRead.getline(szBUF, sizeof(szBUF));	//读取一行。

		std::stringstream ss(szBUF);	//解析空格分开的数据,用stringstream
		std::string strTmp;

		const char kSEPARATOR = ' ';	//分隔符,这里指【空格】
		while (getline(ss, strTmp, kSEPARATOR))
		{
			_outData.push_back( stoi(strTmp) );
		}
	}
	else
	{
		bRet = false;
	}
	char cTest = 'a';	//断点测试
	return bRet;
}

//写入文件
bool WriteDataFile(std::vector& _outData)
{
	const char szFile[] = "output_file.txt";	//输出文件名
	//ofsteam
	bool bRet = true;

	std::ofstream ioRead(szFile);	//构造函数会直接创建文件。

	if (ioRead.fail())
	{
		bRet = false;	//创建失败

	}
	else
	{
		bRet = true;
		for (auto itr=_outData.begin(); itr!=_outData.end(); ++itr)
		{
			ioRead << *itr << ' ';	//写入文件,用空格隔开
		}
	}

	ioRead.close();	// if don't close, then write nothing.
	_outData.clear();

	char cTest = 'a';	//断点测试	

	return bRet;
}

注:也不知道是哪位高手出的这道面试题,用手写的话最快也得20分钟吧,如果我遇到的话应该会只写出思路与关键词,否则时间不够。

本文归类

建议归类到【C++】。

明日计划

标题:在windows server 2019上部署gitblit
小知识:windows server 2019默认IE不能下载文件的解决方法。

参考文献:

《C++笔试面试宝典2011版.docx》
《C++ Prime Plus》(第6版),第768页,17.4文件的输入和输出。

C++文件读写详解(ofstream,ifstream,fstream)
https://blog.csdn.net/sheng_bw/article/details/85336298

今日收藏:

ofstream官方说明
http://www.cplusplus.com/reference/fstream/ofstream/ofstream/

你可能感兴趣的:(程序猿日记,C++,面试)