C++第17周项目7——用程序玩文件(2)去多余空格

简介: 课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565【项目7(必看但选做)- 用程序玩转文字】互联网时代,文字的处理显得比任何时候都重重要例如,想想搜索引擎在做什么工作。用们用惯了集成开发环境,例如VC++6.0,它帮我们处理源程序,实际上就是处理由代码行构成的字符串。本项目的几个问题作为引子,请同学们初步体会相关问题

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565


【项目7(必看但选做)- 用程序玩转文字】互联网时代,文字的处理显得比任何时候都重重要例如,想想搜索引擎在做什么工作。用们用惯了集成开发环境,例如VC++6.0,它帮我们处理源程序,实际上就是处理由代码行构成的字符串。本项目的几个问题作为引子,请同学们初步体会相关问题的处理办法。请不要因为一时做不出而焦急,可以在寒假完成,但体验,必须进行下去。
  2、读入一个文件,去除其中所有多余空格后,保存到另外一个文件中(让程序自动整理格式)。提示:两个单词中间多于1个的空格是多余,再进一步完善,可以处理:每一行首字符前的所有空格、每一行最后的若干空格、单词和标点中间的所有空格等。

参考解答
//本程序用于将文件中的多余空格去除并保存到另一文件中
#include <iostream>
#include <fstream>
void alltrim(char *);
using namespace std;
int main() 
{
	ifstream sourceFile;
	ofstream targetFile;
	char str[100];
	int num_char=0, num_line=0;
	int i;
	sourceFile.open("c.txt", ios::in);
	if(!sourceFile)       //测试是否成功打开  
    {  
        cerr<<"input file open error!"<<endl;  
        exit(1);  
    }  
	targetFile.open("b.txt", ios::out);
	if(!targetFile)       //测试是否成功打开  
    {  
        cerr<<"output file open error!"<<endl;  
        exit(1);  
    }  
	while (!sourceFile.eof())   //一篇文章由多行构成
	{	
		sourceFile.getline(str,100,'\n');   
		alltrim(str);  //删去多余空格
		//保存删去空格后的字符
		i=0;
		while(*(str+i)!='\0')
		{
			targetFile.put(*(str+i));
			++i;
		}
		targetFile.put('\n');
	}
	sourceFile.close();
	targetFile.close();
	cout<<"处理完毕,请查看文件。"<<endl;
	return 0;
}

//本函数删除原文件中所有多余空格并保存到另一文件中
void alltrim(char *str)
{
	char *p=str,*q=str;
	bool notSpace=false;
	while(*q==' ')
		q++;
	while(*q!='\0')
	{
		if (*q!=' ') 
		{
			notSpace=true;
			*p++=*q++; // 不是空格,复制   
		}
		else if (notSpace)   //是空格,但目前是第一个(因为之前notSpace=true;的条件是遇非空格)
		{                
			notSpace=false;   //第一个空格仍然要复制
			*p++=*q++;     
		}
		else   //如遇第二个或更后的空格,正是由于遇到第一个空格并复制后,notSpace=false;的原因,会走到这儿
		{
			q++;   //不复制
		}
	}
	*p='\0';
}


目录
相关文章
|
3月前
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
214 3
|
9月前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
12月前
|
存储 程序员 编译器
简述 C、C++程序编译的内存分配情况
在C和C++程序编译过程中,内存被划分为几个区域进行分配:代码区存储常量和执行指令;全局/静态变量区存放全局变量及静态变量;栈区管理函数参数、局部变量等;堆区则用于动态分配内存,由程序员控制释放,共同支撑着程序运行时的数据存储与处理需求。
532 22
WK
|
11月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
531 1
|
12月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
2010 3
|
12月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
155 0
Linux c/c++文件的基本操作
|
C++ 内存技术
[转]Visual C++内嵌swf文件并播放
[转]Visual C++内嵌swf文件并播放
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
218 3
|
C++
【C++基础】程序流程结构详解
这篇文章详细介绍了C++中程序流程的三种基本结构:顺序结构、选择结构和循环结构,包括if语句、三目运算符、switch语句、while循环、do…while循环、for循环以及跳转语句break、continue和goto的使用和示例。
250 2
|
12月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
306 0