`
daojin
  • 浏览: 695986 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

c++一日一练:利用流来实现读和写的同步(原创)

阅读更多
int main(int argc,char*argv[])
{
	 string s;
     stringstream ssm;
	 //ssm.rdbuf();
	 //写到流的缓冲区,,但是并不刷新。
	 ssm<<"hello分隔符!";
	 //从流读,实际上是从缓冲区读。
	 //读完之后缓冲区数据没了。
	 cout<<(bool)(ssm>>s);
	 //这句话如果没有,那么将导致如下情况:
	 //如果缓冲区在输出没有刷新的情况下被读取了。。
	 //那么将会视为错误。
	 //当前缓冲区被标记为不可用。
	 //所以要清楚这个状态。让它永远可用。
	 ssm.clear();
	 cout<<s<<endl;
	 ssm<<"hello!";
	 ssm>>s;
	 cout<<s;
}

 基本思想:

一.用一个缓冲区来实现读写

 

优点:简单。。。

 

缺点...必须保证写流缓冲并不往写流刷新,而且读和写共享一个缓冲区,这在没有中间媒介的情况下很有用。(例如不需要写入文件)

 

写流(out):

 

读流(in):

 

二。用二个缓冲区。。

 

代码:

 

 

// dffffffff.cpp : Defines the entry point for the console application.
//
#include <StdAfx.h>
#include   <iostream> 
#include   <locale> 
#include   <fstream>
#include <string> 
#include <sstream>
using namespace std;
//创建全局对象。这些对象保存在全局区。
string line;
stringstream *pof=new stringstream(line);
ostream *pOut=new ostream(pof->rdbuf());	
//stringstream* pif=new  stringstream("ddddddddddddddddddddddd");
istream *pIn=new istream(pof->rdbuf());
void MyWrite(string s){
	(*pOut)<<s<<endl;
	//pof->close();
}
bool MyRead(string &sr){
    /*********************输出,从文件读数据********************************************/
    //创建输入缓冲

	//绑定(输入)
	pIn->tie(pOut);
	return (*pIn)>>sr;
	//pIn->clear();
	//ifs.close();
}

int main(int argc, char* argv[])
{	
    MyWrite("12345");
	MyWrite("23333333312");
	MyWrite("sdafa");
	string ms;
    while(MyRead(ms)){
		cout<<ms;
	}
	MyWrite("12345");
	MyWrite("23333333312");
	MyWrite("sdafa");
    while(MyRead(ms)){
		cout<<ms;
	}
	return 0;
}

    

对于了来说,不用我多说,大家也已经知道它是用于C++风格的字符串的输入输出的。 
  stringstream的构造函数原形如下: 

  stringstream::stringstream(string str);
  示例代码如下:

 #include <iostream>  
#include <sstream>  
#include <string>  
using namespace std;  
  
int main()   
{  
    stringstream ostr("ccc");  
    ostr.put('d');  
    ostr.put('e');  
    ostr<<"fg";  
    string gstr = ostr.str();  
    cout<<gstr<<endl;  
  
    char a;  
    ostr>>a;  
    cout<<a  
      
    system("pause");  
}

  除此而外,stringstream类的对象我们还常用它进行string与各种内置类型数据之间的转换。 

  示例代码如下:

 #include <iostream>  
#include <sstream>  
#include <string>  
using namespace std;  
  
int main()   
{  
    stringstream sstr;  
//--------int转string-----------  
    int a=100;  
    string str;  
    sstr<<a;  
    sstr>>str;  
    cout<<str<<endl;  
//--------string转char[]--------  
    sstr.clear();//如果你想通过使用同一stringstream对象实现多种类型的转换,请注意在每一次转换之后都必须调用clear()成员函数。  
    string name = "colinguan";  
    char cname[200];  
    sstr<<name;  
    sstr>>cname;  
    cout<<cname;  
    system("pause");  
}

 

分享到:
评论

相关推荐

    线程同步机制代码,用c++写的,:使用Windows互斥信号量操作函数和同步机制的Peterson,实现进程互斥和同步

    小实验三:根据同步机制的Peterson软件解决方案尝试自己编程实现线程同步机制和用于上述线程并发问题的解决,并基于程序运行时间长短将其与基于Windows互斥信号量的线程同步机制的效率展开比较。 实验要求:线程主体...

    PTP时间同步C++实现

    综上所述,PTP时间同步的C++实现涉及了网络通信、时间戳处理、同步算法、事件调度等多个技术领域,需要对底层系统调用、网络编程和并发控制有深入理解。通过这样的实现,可以构建出具有高精度时间同步能力的软件系统...

    利用C++类实现PNG图像读写及显示

    利用libpng库函数,可以设计一个C++类来实现PNG图像的读写操作。在VC++6.0开发平台下,可以通过设计基于多文档界面的图像浏览器来展示PNG图像,这样不仅能够读取和显示PNG图像,还能实现图像的编辑功能。 在设计C++...

    读者写者问题c++实现

    在读者写者问题中,我们可以设置两个条件变量:一个用于读者等待写者完成写操作,另一个用于写者等待所有读者完成读操作。C++中的`std::condition_variable`可以满足这个需求。 5. **读者函数**:读者在读取数据前...

    WorkFlow C++ 工作流图形

    4. **事件驱动编程**:工作流的执行通常基于事件,如用户交互或任务完成,因此需要理解和实现事件驱动的编程模型。 5. **状态机**:工作流的每个任务可能处于不同的状态(如等待、运行、完成等),实现一个状态机...

    Windows+API一日一练 C++之Windows API简单入门

    Windows+API一日一练 C++之Windows API简单入门 Windows+API一日一练 C++之Windows API简单入门 Windows+API一日一练 C++之Windows API简单入门 symbian

    windows和linux读写锁C++实现

    在多线程编程中,读写锁是一种非常重要的同步机制,它允许多个读线程同时访问共享资源,但只允许一个写线程独占资源,从而提高了并发性能。本话题将详细探讨在Windows和Linux环境下,如何使用C++来实现读写锁。 ...

    C++实现USB HID设备读写代码

    C++语言可以实现读取USB HID设备的数据读写,通过使用C++语言编写的代码,可以实现对USB HID设备的控制和交互。下面是关于C++实现USB HID设备读写代码的知识点: 1. USB HID设备概述 USB HID(Human Interface ...

    c++串口读写实例源代码

    本资源“c++串口读写实例源代码”是针对C++编程语言和Visual C++(VC)环境设计的,用于实现串口的读取与写入功能。下面我们将详细探讨这个主题涉及的知识点。 1. **C++编程语言**:C++是一种通用的、面向对象的...

    VC++6.0下利用互斥量同步线程来实现文件读取进度条C++源代码程序小实例

    在本文中,我们将深入探讨如何在VC++6.0环境下使用互斥量(Mutex)同步线程,以实现文件读取进度条的功能。这是一项在多线程编程中常见的任务,尤其是在开发用户界面丰富的应用程序时,为了提供更好的用户体验,我们...

    C++ 播放音频流(PCM裸流)

    具体实现可能包括定义一个类来管理音频缓冲、读取和播放操作,以及一个线程来持续读取和填充缓冲区。代码可能使用了特定的音频库,如PortAudio或SFML,它们提供跨平台的音频播放支持。 学习和理解这段代码,可以有...

    HDLC协议的C++程序实现实例

    总的来说,编写一个C++实现的HDLC协议程序需要对协议本身有深入理解,并能熟练运用C++的内存管理、数据结构和流处理等技术。同时,对于网络通信的基础知识,如TCP/IP模型、socket编程等,也需要有一定的掌握。通过...

    C++高效编程:内存与性能优化(pdf版)

    《C++高效编程:内存与性能优化》是一本专注于C++编程语言内存管理和性能调优的书籍。本书深入探讨了如何在C++编程中高效地使用内存资源,以及如何进行性能优化,以编写出既高效又优雅的代码。 书籍作者Rene ...

    C++ 实现WebSocket 服务器

    在本项目中,我们使用C++来实现一个WebSocket服务器,借助了libuv库来处理TCP层面的基础工作,并利用gbase作为辅助工具。 ### C++ 语言特性 C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化...

    C++实现mqtt协议

    本文将深入探讨如何利用C++来实现MQTT协议,以及涉及的主要概念和技术。 首先,我们需要了解MQTT协议的基本原理。它基于TCP/IP协议栈,以小的消息格式传输数据,支持QoS(Quality of Service)等级0、1、2,确保...

    C++ 双缓存机制播放音频流(PCM裸流)

    在本文中,我们将深入探讨如何使用C++实现双缓存机制来播放音频流,特别是针对PCM(脉冲编码调制)裸流。PCM是数字音频的一种常见格式,它以原始样点的形式存储声音数据,不包含任何编码或压缩。双缓存机制在处理...

    C++实现的服务器post访问并实现JSON数据流解析

    在本文中,我们将深入探讨如何使用C++实现一个服务器POST访问功能,并且解析接收到的JSON数据流。C++作为一种强大的编程语言,广泛应用于系统级编程、游戏开发以及服务器端应用。结合HTTP协议和JSON数据格式,我们...

    基于C++的雨流计数法程序

    总之,"基于C++的雨流计数法程序"是一个实用的工程工具,它利用C++的强大功能处理复杂的循环载荷数据,为疲劳寿命评估提供了有效手段。通过对源代码的学习和理解,开发者不仅可以掌握雨流计数法的实现细节,还能...

    C++求导算法和实现

    在C++中,可以利用模板元编程技术创建一个通用的求导函数,对任意支持的运算符进行操作。例如,可以定义一个`Derivative`模板类,根据输入的函数类型和阶数自动计算导数。 2. 数值求导:在实际应用中,很多函数没有...

    HTTP Client C++实现

    在IT领域,网络编程是不可或缺的一部分,而HTTP客户端的实现对于开发者来说至关重要,尤其是在C++环境中。本篇文章将深入探讨如何使用C++实现一个HTTP客户端,主要基于提供的资源"CHttpClient.rar"。 HTTP(超文本...

Global site tag (gtag.js) - Google Analytics