C++基础学习教程(三)
承接上一讲。
2.7文件I/O
关于读写文件,C++中有一个专门的头文件<fstream>。
首先是读文件演示样例,例如以下:
</pre><pre>
/*************************************************************************
> File Name: list1301_file.cpp
> Author: suool
> Mail: 1020935219@qq.com
> Created Time: 2014年05月22日 星期四 22时15分11秒
************************************************************************/ #include<cstdio>
#include<iostream>
#include<fstream>
#include<string> using namespace std; int main()
{
ifstream in ("list1301.txt");
if (not in )
{
perror("list1301.txt");
}
else
{
string x;
while(in >> x)
{
cout << x << endl;
}
in.close();
}
return 0;
}
文件内容:
读操作结果:
然后是写文件,示比例如以下:
/*************************************************************************
> File Name: list1302_write.cpp
> Author: suool
> Mail: 1020935219@qq.com
> Created Time: 2014年05月24日 星期六 12时24分23秒
> Aim at:Copying Integers from a Named File to a Named File
************************************************************************/ #include <cstdio>
#include <fstream>
#include <iostream> using namespace std; int main()
{
// Read data from file in
ifstream in("data.txt");
if (not in)
perror("data.txt"); // 文件不存在
else
{
ofstream out("out.txt"); // Write the data to out
if (not out)
perror("out.txt"); // 文件不存在
else
{
int x(0);
while (in >> x)
out << x << '\n';
out.close();
in.close(); // 关闭文件流
}
}
return 0;
}
文件内容例如以下:
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
只是上面的读写文件存在一定的问题。就是程序没有检查输出操作是否成功运行,以下的程序的改造就是带有最小错误检查的演示样例:
/*************************************************************************
> File Name: list1302_write_check.cpp
> Author: suool
> Mail: 1020935219@qq.com
> Created Time: 2014年05月24日 星期六 12时58分50秒
************************************************************************/ #include<iostream>
#include<string>
#include<fstream>
#include<cstdio>
using namespace std;
int main()
{
// read data from in
ifstream in("data.txt");
if(not in)
perror("data.txt");
else
{
ofstream out("out.txt");
if(not out)
perror("out.txt");
else
{
int x(0);
while(in >> x)
out << x<< endl;
out.close();
if(not out)
{
perror("ou.txt");
}
}
}
return 0;
}
就是这一部分:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
2.8数据结构——映射
前面我们已经介绍并学习了C++的一个特有的数据结构——向量。如今我要介绍另外一个C++的特有数据结构——映射,其它的高级语言成称之为字典等,事实上都一样就是键值对的映射罢了。当中键是唯一的。值不限。
以下是一个演示样例:
/*************************************************************************
> File Name: list1401_data.cpp
> Author: suool
> Mail: 1020935219@qq.com
> Created Time: 2014年05月24日 星期六 13时17分39秒
************************************************************************/ // 读取单词并统计出现的次数
#include<cstdio>
#include<iomanip>
#include<ios>
#include<iostream>
#include<fstream>
#include<string>
#include<map> using namespace std;
int main()
{
map<string, int> counts;
string word; fstream in("data.txt");
if(not in)
{
perror("data.txt");
}
// Read words from the standard input and count the number of times
// each word occurs.
cout << "Read words from data.txt, spreate by blank space" << endl;
// For each word/count pair...
ofstream out("out.txt");
if(not out)
{
perror("out.txt");
}
while(in >> word)
{
++counts[word];
out << word << endl;
}
// out.close();
in.close();
cout << "The words and count are:" << endl;
out << "The words and count are:" << endl;
for (map<string,int>::iterator iter(counts.begin()); iter != counts.end(); ++iter)
{
// Print the word, tab, the count, newline.
cout << iter->first << '\t' << iter->second << '\n';
out << iter->first << '\t' << iter->second << '\n';
}
out.close();
if(not out)
{
perror("out.txt");
}
return 0;
}
数据文件依旧上面那个,结果例如以下:
下面一个演示样例是利用迭代器循环格式化输出映射内容:
/*************************************************************************
> File Name: list1401_data_compat.cpp
> Author: suool
> Mail: 1020935219@qq.com
> Created Time: 2014年05月24日 星期六 14时58分34秒
************************************************************************/ #include <iomanip>
#include <ios>
#include <iostream>
#include <map>
#include<fstream>
#include <string> // Aligning Words and Counts Neatly using namespace std; int main()
{
map<string, int> counts;
string word;
// read data from data.txt
fstream in("data.txt");
if(not in)
{
perror("data.txt");
} cout << "Read words from data.txt, spreate by blank space" << endl;
ofstream out("out.txt");
if(not out)
{
perror("out.txt");
}
// write data to out.txt
out << "Begin !!!! Hahahahahahahhaha" << endl;
while(in >> word)
{
++counts[word];
out << word << endl;
} // Determine the longest word.
string::size_type longest(0);
for (map<string,int>::iterator iter(counts.begin()); iter != counts.end(); ++iter)
if (iter->first.size() > longest)
longest = iter->first.size(); // For each word/count pair...
const int count_size(10); // Number of places for printing the count
out << "Hahahahahahahhaha!!!!" << endl;
for (map<string,int>::iterator iter(counts.begin()); iter != counts.end(); ++iter)
{
// Print the word, count, newline. Keep the columns neatly aligned.
cout << setw(longest) << left << iter->first <<
setw(count_size) << right << iter->second << '\n'; out << setw(longest) << left << iter->first <<
setw(count_size) << right << iter->second << '\n';
}
return 0;
}
文件内容:
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
以下一个样例是搜索映射中的指定键:
/*************************************************************************
> File Name: list1401_data_serach.cpp
> Author: suool
> Mail: 1020935219@qq.com
> Created Time: 2014年05月24日 星期六 15时17分30秒
************************************************************************/ #include<cstdio>
#include<fstream>
#include<iomanip>
#include<iostream>
#include<string>
#include<map> using namespace std;
int main()
{
map<string, int> counts;
string word; // read data from data.txt
ifstream in ("word.txt");
if(not in)
{
perror("word.txt");
}
// write data to out.txt
ofstream out ("out.txt");
if(not out)
{
perror("out.txt");
}
out << "Begin !!!! Hahahhahahah!!! \n";
while(in >> word)
{
++counts[word];
out << word << '\n';
}
out.close(); map<string, int>::iterator the(counts.find("the"));
if(the == counts.end())
cout << "\"the\" is not found!!!!" << endl;
else if(the->second == 1)
cout << "\"the\" occurs " << the->second << " time\n";
else
cout << "\"the\" occurs " << the->second << " times\n"; return 0;
}
文件内容:
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vvb2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
未完待续。
。。。。。
。。
。
C++基础学习教程(三)的更多相关文章
- JavaScript 基础 学习(三)
JavaScript 基础 学习(三) 事件三要素 1.事件源: 绑定在谁身上的事件(和谁约定好) 2.事件类型: 绑定一个什么事件 3.事件处理函数: 当行为发生的时候,要执行哪一个函数 ...
- redis学习教程三《发送订阅、事务、连接》
redis学习教程三<发送订阅.事务.连接> 一:发送订阅 Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.Redi ...
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...
- java网络爬虫基础学习(三)
尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...
- C++基础学习教程(一)
開始自己的C++复习进阶之路. 声明: 这次写的博文纯当是一个回想复习的教程.一些非常基础的知识将不再出现.或者一掠而过,这次的主要风格就是演示样例代码非常多~~~ 全部代码在Ubuntu 14.04 ...
- spring boot基础学习教程
Spring boot 标签(空格分隔): springboot HelloWorld 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新 ...
- salesforce 零基础学习(三十六)通过Process Builder以及Apex代码实现锁定记录( Lock Record)
上一篇内容是通过Process Builder和Approval Processes实现锁定记录的功能,有的时候,往往锁定一条记录需要很多的限制条件,如果通过Approval Processes的条件 ...
- opengl基础学习专题 (三) 多边形绘制的几种样式
题外话 聪明人之所以不会成功,是由于他们缺乏坚韧的毅力. ——艾萨克·牛顿(1643年1月4日—1727年3月31日)英国 也许可以理解为 想更深一步的时候,坚持,努力和聪明缺一不可. 挺直腰杆在此向 ...
- java基础学习总结三(jdk7新特性、变量(局部变量和成员变量)、常量以及运算符)
一:jdk7新特性 可以表示二进制数值,以0b开头,中间可以使用下划线_分隔符.如下: @Test /** * 测试jdk新特性 */ public void testJdk7(){ int a=0b ...
随机推荐
- 去哪网实习总结:如何配置数据库连接(JavaWeb)
本来是以做数据挖掘的目的进去哪网的,结构却成了系统开发.. . 只是还是比較认真的做了三个月,老师非常认同我的工作态度和成果. .. 实习立即就要结束了.总结一下几点之前没有注意过的变成习惯和问题,分 ...
- ios网络学习------3 用非代理方法实现异步post请求
#pragma mark - 这是私有方法.尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark post登录方法 -(void) ...
- nyoj Wythoff Game(暴力枚举)
Wythoff Game ms | KB 描写叙述 近期ZKC同学在学博弈,学到了一个伟大的博弈问题--威佐夫博弈. 相信大家都学过了吧?没学过?没问题.我将要为你讲述一下这个伟大的博弈问题. ...
- hdoj--3594--Cactus(tarjan)
Cactus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 【HNOI 2004】宠物收养所
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1208 [算法] 建两棵平衡树维护领养者和宠物的特点值,这两棵平衡树支持 插入删除,查 ...
- 关于懒加载中的self.和_
---恢复内容开始--- 在开发中,经常会用到懒加载,最常用的如加载一个数组 如图,在这个懒加载数组中有的地方用到了_array有的地方用到了self.array 原因是_array是直接访问,而se ...
- 关于getchar()的使用
'\n'表示换行.如果用键盘敲一下回车键的话,getchar会返回一个换行符.!='\n'意思是不等于换行符.ch应该是前边定义的一个char型变量, getchar()是一个从缓冲区获取字符的函数, ...
- C#学习小记
1.C#是由微软推出的,基于.Net Framework的面向对象的高级编程语言. 2.C#代码编辑器为Visual Studio,简称VS. 3.Hello World VS中新建Windows控制 ...
- mybatis的二级缓存的使用
1.引入ehcache的jar包和mybatis整合ehcache的jar包: <!-- ehchache --> <dependency> <groupId>ne ...
- SQL Server 忘记登录账号解决方法
[1] 停止SQL Server 服务 和 SQL Server Agent 服务 [2] 以管理员身份打开命令行,单用户模式启动服务.(在单用户模式下启动 SQL Server 可使计算机本地 Ad ...