[C/C++标准库]_[初级]_[使用fstream合并文本文件]

场景:

1. 就是合并文本文件,并且从第2个文件起不要合并第一行.

2. 多加了一个功能,就是支持2个以上的文件合并.

3. 问题: http://ask.csdn.net/questions/192151

只能说很简单: 基础不过关吧,这位同学,也有可能不是开发的,放这里也是为了培训基础差的.

test.cpp

#include <fstream>
#include <string>
#include <iostream>

using namespace std;

//最后一个参数是输出文件.
//支持多余2个的文件合并
//用法,命令行: test.exe 1.txt 2.txt  output.txt
int main(int argc, char const *argv[])
{
	cout << "usage1: test.exe 1.txt 2.txt output.txt" << endl;
	cout << "usage2: test.exe 1.txt 2.txt ... output.txt" << endl;
	if(argc <= 3) return -1;

	bool first_line_readed = false;
	ofstream fout(argv[argc-1], ios::out);
	for(int i = 1 ; i< argc - 1; ++i)
	{
		ifstream fin(argv[i]);
		string str;
		int line_number = 0;
		while(getline(fin,str))
		{
			if(!line_number)
			{
				if(!first_line_readed)
				{
					first_line_readed = true;
					str.append("\n");
					fout.write(str.c_str(),str.size());
				}
			}else
			{
				str.append("\n");
				fout.write(str.c_str(),str.size());
			}

			line_number++;
		}
	}
	cout << "finish..." << argv[argc-1] << endl;
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-24 04:18:01

[C/C++标准库]_[初级]_[使用fstream合并文本文件]的相关文章

[C/C++标准库]_[初级]_[交集和补集]

场景: 1. 计算std::vector A和 std::vector B里的相同的元素, 用于保留不删除. 2. 计算std::vector A和 std::vector B里各自的补集, 用于删除A的补集和添加B的补集,用在一些更新关联表的操作里. 比如联系人A所属分组B是一个集合BV, 把联系人A的所属分组 修改为集合CV, 就需要删除两个集合BV,CV的CV补集和新增BV补集. 3. C++标准库为我们提供了这些算法. 代码: // test_AndroidAssistant.cpp :

[C/C++标准库]_[初级]_[使用ctype里的isxxx函数时要注意的事项]

场景: 1. 标准库里的 ctype.h里的函数是用于1个字节的判断的,但是参数却是int, 这样很容易导致误用. isalpha iscntrl isdigit isgraph isprint ispunct isspace isxdigit isalnum islower isupper int isspace( int ch ); 最恶心的是vc++的实现会对超过1字节的值会直接崩溃,gcc不会!!! #if defined (_DEBUG) extern "C" int __c

[C/C++标准库]_[初级]_[使用模板删除字符串前后空格((w)string space)]

场景: 1. C++没有提供删除std::(w)string的前后空格的函数,比如TrimSpace. 2. 很多库都提供, 但是为了移植代码方便,最好还是能用标准库解决就用标准库. 下边用模板实现了移除空格的函数. test.cpp #include <iostream> #include <stdlib.h> #include <string.h> #include <string> #include <ctype.h> using name

[C/C++不常见语法特性]_[初级]_[左值-右值-lvalue-rvalue]

参考:1. http://en.cppreference.com/w/cpp/language/value_category   << Value categories >> 2. https://msdn.microsoft.com/en-us/library/dd293668.aspx   << Rvalue Reference Declarator: && >>3. https://msdn.microsoft.com/en-us/li

[zlib]_[初级]_[使用Zlib完整解压zip内容]

场景: 1. 解压文件一般用在下载了一个zip文件之后解压,或者分析某个文件需要解压的操作上. 2. 解压文件,特别是解压带文件夹的zip文件往往系统没有提供这类Win32 API,当然C#自带库能解压, 当然这里只讨论C/C++, 像C#和Java这种开挂的标准库不在考虑范围内. 3. zlib解压文件的使用例子在 contrib\minizip 例子里. 这里基本是直接提取miniunz.c 的代码进行封装解压即可, 只是改了下支持中文路径. 主文件 zip_util.cpp #includ

[C/C++标准库]_[初级]_[过滤Windows文件名中的非法字符]

场景: 1. 通常生成文件时需要一个文件名,而生成文件名的方式可能是通过用户输入的字符,但是有些字符在windows上是不能作为文件名的,强行创建这类文件会失败. 2.一般可以通过正则表达式替换所有的非法字符,这里实现的是C++98 template(模板)方式的替换无效字符,std::string,std::wstring. 基本上windows上和字符串打交道都离不开wstring. 函数: template<class T> void FilterInvalidFileNameChar(

[C/C++标准库]_[初级]_[构造文件路径(stringByAppendingPathComponent)]

场景: 1. 很多情况下需要通过文件夹和文件名拼接文件路径字符串,每次都需要判断是否需要添加路径分隔符seperator很麻烦,所以可以写一个通用函数. 2. 大多数情况下都是windows使用wstring,mac使用string,所以用模版实现最通用. 函数: template<class T> T AppendPathComponent(const T& source,const T& component) { int length = source.length();

[C/C++标准库]_[初级]_[使用std::sort排序各种类型数据]

std::sort 场景: 1. 在使用sort排序时,有时候需要对对象的某个值进行排序,比如对类对象的某个id的int类型值或者bool类型值,其实bool类型值排序研究了半天.. test_sort.cpp #include <stdlib.h> #include <string.h> #include <string> #include <vector> #include <algorithm> #include <iostream&

[C/C++标准库]_[初级]_[计算结构体成员的偏移量]

场景: 1. C结构体里计算结构体的偏移量平常看来没什么必要,但是放到插件结构的设计里就有必要了,比如只能使用偏移量访问的场景,而不能使用引用成员变量的场景. 2. 在设计一致性的接口时,公用的接口不怎么变化的,但是插件模块的结构可以不需要根据统一结构来设计,他们只需要提供偏移量给公用接口调用就行了,不同的插件 可能偏移量不一致,因为他们可以独立实现.公用接口就可以通过偏移量来访问不同的变量. 3. 可以使用stddef.h文件里的  offsetof /* Define offsetof ma