C++文件输入输出问题,如何向文件输入一行string替换字符类的字符

c++将读取的文件内容一次性输出于屏幕
是这样的 我用c++实现将很多字符构成的txt文件依次输出 ,从而形成动画的效果
但是在每读取一个txt文件的时候读取的很慢 在控制台输出的时候文件的字符从上往下刷下来,让后清屏 再读第二个文件 这样太慢了 能不能让一个文件的字符一次性显示屏幕上啊?
我的代码:
void hoop(string x)
const char *txtname=x.c_str();
ifstream infile(txtname,ios::in);
if(!infile)
cerr&&"open1error!"&&
while(infile.get(ch))
cout.put(ch);
infile.close();
int main()
string c="F:/字符画/";
string d=".txt";
char temp[64];
for(int i=1;i&3456;i++)
sprintf(temp, "%d", ss);
string s(temp);
string a=c+s.c_str()+d;
system("cls");
按赞数排序
我给你的代码只是映射简单例子:
而注释给啦一些我的思路。
其实对于你想要的这种效果,你还应该理解i/o编程
可以参考:blog.csdn.net/querdaizhi/article/details/7436722
若是你觉得还有问题我们继续交流!
#include &stdlib.h&
#include &stdio.h&
#include &unistd.h&
#include &sys/mman.h&
#include &sys/stat.h&
#include &fcntl.h&
//#include "tlpi_hdr.h"
#define errExit(msg) (perror(msg),(exit(1)))
int main(int argc,char * argv[])
if(argc !=2 ||strcmp(argv[1],"--help")==0)
//usageErr("%s file\n",argv[0]);
errExit("usage..");
fd=open(argv[1],O_RDONLY);//Looks ,here your should change as
*while file[i].txt no finish
fd=open(file[i].txt)
mmap(......)
if(fd==-1)
errExit("open");
/*Obtain the size of the file and use it to specify the size of
the mapping and the size of the buffer to be written */
if(fstat(fd,&sb)==-1)
errExit("fstat");
addr=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0);
if(addr==MAP_FAILED)
errExit("mmap");
if(write(STDOUT_FILENO,addr,sb.st_size)!=sb.st_size)
errExit("partial/failed write");
exit(EXIT_SUCCESS);
问题的关键是
while(infile.get(ch))
cout.put(ch);
你是读取一行字符输出一行的。
你需要用一个变量保存完整的一个文件的内容,再整体输出才行。
简单来看可以在你的hoop中定义一个string,用来缓存一个文件中的全部内容。hoop不要一次输出一行,每次读取之后放到string中:
while(infile.get(ch))
cout.put(ch);
while(infile.get(ch))
cout.put(temp);
这样就行喽:D
在linux下,要是标准输出没有遇到换行的化,是不会立即输出的。因为是代换冲的。一般可以fflush(stream).而对于你想要的效果,我觉得可以考虑
用内存映射,避免read/write读写过慢的缺点。
其他相似问题
相关参考资料c++中string类字符串怎样才能正确地以二进制类型输入文件啊-中国学网-中国IT综合门户网站
> c++中string类字符串怎样才能正确地以二进制类型输入文件啊
c++中string类字符串怎样才能正确地以二进制类型输入文件啊
转载 编辑:李强
为了帮助网友解决“c++中string类字符串怎样才能正确”相关的问题,中国学网通过互联网对“c++中string类字符串怎样才能正确”相关的解决方案进行了整理,用户详细问题包括:return 0,但打开文件却发现不是乱码#include&#include&lt,ios.c_str()我写了个程序;int main(){输入ofstream fout(&&#47:;getline(cin,是以二进制写入;fstream&string&fout.dat&quot,str),a.write(str.size());;&#47:binary).close(),具体解决方案如下:解决方案1:只是它的内容都是些ASCII码(或者是汉字等双字节字符)你对文本文件的认识还是不清楚,就弄个int数组,文本文件本质上还是二进制文件,你输入的都是ASCII码,那打开看自然不会是乱码要想看乱码通过对数据库的索引,我们还为您准备了:答:[]是一个运算符,string类的实现里面重载了这个运算符,用于获取字符===========================================答:有两种方式 string str = "asdf"; 一是str[i], 二是str.at(i); i都是0-base,即i=0,时,结果是a,I=1,结果S===========================================答:fstream fs( "file.txt" ) ; // 创建个文件流对象,并打开"file.txt" // 创建字符串流对象 ss ===========================================问:有一段代码如下: #include &iostream.h& #include &string.h& void mai...答:#include #include void main() { string a("frind"),b("ants"); string wish="Bon appetite!"; phrase="I love "+a+" "+b+"!"; cout===========================================问:我写了个程序,是以二进制写入,但打开文件却发现不是乱码 #include&str...答:你对文本文件的认识还是不清楚,文本文件本质上还是二进制文件,只是它的内容都是些ASCII码(或者是汉字等双字节字符),你输入的都是ASCII码,那打开看自然不会是乱码 要想看乱码,就弄个int数组,然后用write写入文件就看出效果了===========================================问:在C++中(VC6),如何实现string类包含空格的字符串输入,并且输入结束时...答:#include #include int main(){ string str1; getline(cin, str1); cout ===========================================问:C风格的话使用strlen 那string类型的怎么测额答:string a = "abc"; int len = a.length(); // 或者是a.size();===========================================问:C风格的话使用strlen 那string类型的怎么测额答: getline(cin,str); 仅此而已。。。 观楼主英俊潇洒,风流倜傥,必当世豪杰,大侠闲暇之余,关注0x30百度贴吧,必成千秋霸业,建不世之功。===========================================问:我试过cin.getline(),但不能通过调试,这个只适合char类型? 那请问str...答:可以啊,不过你要包含C++标准库中的String类,#include===========================================举个例子说明吧: string str="welcome to chaina!";//m为长度 m=str.size();//求字符串长度或者下面的 m=str.length(); //同上面size功能一样,都是求字符串长度的=========================================== 程序没错&===========================================string == ""===========================================没区别,效果一样,一个用于之前,一个用于STL 中。。===========================================举个例子说明吧: string str="welcome to chaina!";//m为长度 m=str.size();//求字符串长度或者下面的 m=str.length(); //同上面size功能一样,都是求字符串长度...===========================================string a = "abc"; int len = a.length(); // 或者是a.size();===========================================of b string a ("djflsd"); initialize a as a copy of the string literal string a (n, 'a'); initialize a with n copies of the character 'a' PS: from c++ prime...=========================================== 面向前移行===========================================寻找一个字符串中是否包含一串已经输入的字符,如果不区分大小写怎么办? 使用strstr函数。但strstr找得到的话返回找到的位置,找不到的话返回NULL 87=========================================== 用substr可以设置起始索引和结束索引===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
此人已被禁足、禁言!!
空间积分0 信誉积分108 UID阅读权限10积分159帖子精华可用积分159 专家积分0 在线时间5 小时注册时间最后登录
白手起家, 积分 159, 距离下一级还需 41 积分
帖子主题精华可用积分159 专家积分0 在线时间5 小时注册时间最后登录
论坛徽章:0
放入vector&string& 进行sort等操作
现在想把它们都写入文件中
应该如何写啊?
望大家多多指教!
个人签名太长,无法正常显示。。。
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分0 信誉积分100 UID644435阅读权限10积分35帖子精华可用积分35 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 35, 距离下一级还需 165 积分
帖子主题精华可用积分35 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
ofstream ofile(&v.log&,ios::app);
copy(v.begin(),v.end(),ostream_iterator& string &( ofile ))
没测试。 呵呵 自己try一下
此人已被禁足、禁言!!
空间积分0 信誉积分108 UID阅读权限10积分159帖子精华可用积分159 专家积分0 在线时间5 小时注册时间最后登录
白手起家, 积分 159, 距离下一级还需 41 积分
帖子主题精华可用积分159 专家积分0 在线时间5 小时注册时间最后登录
论坛徽章:0
个人签名太长,无法正常显示。。。
空间积分0 信誉积分100 UID644435阅读权限10积分35帖子精华可用积分35 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 35, 距离下一级还需 165 积分
帖子主题精华可用积分35 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
int main()
& && &&&vector&string&v;
& && &&&v.push_back(&aaa&);
& && &&&v.push_back(&bbb&);
& && &&&v.push_back(&ccc&);
& && &&&ofstream ofile(&v.log&,ios::app);
& && &&&//ostream_iterator&string&(cout,& &);
& && &&&copy(v.begin(),v.end(),ostream_iterator&string&(ofile));
& && &&&return 0;
i have tested: it,
空间积分0 信誉积分100 UID644435阅读权限10积分35帖子精华可用积分35 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 35, 距离下一级还需 165 积分
帖子主题精华可用积分35 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
Do not forget the header file
#include &fstream&
#include &vector&
#include &string&
#include &algorithm&
#include &iterator&
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处随笔 - 70&
文章 - 160&
trackbacks - 0
本博客采用进行许可。本博客版权归作者所有,欢迎转载,但未经作者同意不得随机删除文章任何内容,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
具体操作方式可。如您有任何疑问或者授权方面的协商,请给我留言。
积分与排名
阅读排行榜
评论排行榜
原文链接:
大家在学习C++编程时,一般在输入方面都是使用的cin.而cin是使用空白(空格,制表符和换行符)来定字符串的界的。这就导致了对于带有空格的字符串,比如”I
Love ”只能读入”I”,后面的都无法读入。这时怎么办?
&一.对于:方法一:getline()读入整行数据,它使用回车键输入的换行符来确定输入结尾。调用方法:
cin.getline(str, len);第一个参数str是用来存储输入行的数组名称,第二个参数len是要读取的字符数。
&1&#include&&iostream&&2&using&namespace&&3&&&4&int&main()&5&{&6&&&&&char&str[<span style="COLOR: #];&7&&&&&cin.getline(str,&<span style="COLOR: #);&8&&&&&cout&&&&str&&&&&9&&&&&return&<span style="COLOR: #;<span style="COLOR: #&}
方法二:get()
调用方法:cin.get(str, len);
&1&#include&&iostream&&2&using&namespace&&3&&&4&int&main()&5&{&6&&&&&char&str[<span style="COLOR: #];&7&&&&&cin.get(str,&<span style="COLOR: #);&8&&&&&cout&&&&str&&&&&9&&&&&return&<span style="COLOR: #;<span style="COLOR: #&}
那么两者有何区别?两者都读取一行输入,直至换行符。然后,getline将丢弃换行符,而get()将换行符保留在输入序列里。所以,再使用cin.get()输入多行数据时,中间可以使用get()消除换行符。
&1&#include&&iostream&&2&using&namespace&&3&&&4&int&main()&5&{&6&&&&&char&str1[<span style="COLOR: #],&str2[<span style="COLOR: #];&7&&&&&cin.get(str1,&<span style="COLOR: #);&8&&&&&cin.get();&9&&&&&cin.get(str2,&<span style="COLOR: #);<span style="COLOR: #&&&&&cout&&&&"str1:&"&&&&str1&&&&<span style="COLOR: #&&&&&cout&&&&"str2:&"&&&&str2&&&&<span style="COLOR: #&&&&&return&<span style="COLOR: #;<span style="COLOR: #&}
因为get(str, len)和get()都是cin的类成员,所以可以合并起来写:
&1&#include&&iostream&&2&using&namespace&&3&&&4&int&main()&5&{&6&&&&&char&str1[<span style="COLOR: #],&str2[<span style="COLOR: #];&7&&&&&cin.get(str1,&<span style="COLOR: #).get();&&&//&注意这里!&8&&&&&cin.get(str2,&<span style="COLOR: #);&9&&&&&cout&&&&"str1:&"&&&&str1&&&&<span style="COLOR: #&&&&&cout&&&&"str2:&"&&&&str2&&&&<span style="COLOR: #&&&&&return&<span style="COLOR: #;<span style="COLOR: #&}
(欢迎大家去我论坛学习::)
二.方法一:getline(cin,
这说明这里的getline不是类方法。
&1&#include&&iostream&&2&#include&&string&&3&using&namespace&&4&&&5&int&main()&6&{&7&&&&&string&&8&&&&&getline(cin,&str);&9&&&&&cout&&&&str&&&&<span style="COLOR: #&&&&&return&<span style="COLOR: #;<span style="COLOR: #&}
PS:以后如果对输入方面还有更多了解,会继续补充,希望大家支持,多多交流。
阅读(3289)
&re: C++输入一行字符串的一点小结& 12:32&
顶顶!!!&&&&&&
&re: C++输入一行字符串的一点小结& 22:44&
哥来了 , 给你顶顶 ``&&&&&&}

我要回帖

更多关于 string 截取字符串 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信