关于string对象的按行读写
2015-12-15 23:18
190 查看
今晚在做题时遇到了关于string的读写问题,之前没有引起注意导致出错。
想从文件中读取一行字符串(含空格,如:where are
you),先贴代码:
string s1;
ifstream fin("in.txt");
ofstream
fout("out.txt");
for(int i=0;i<n;i++)
{ k1=0;
k2=0;
fin>>m1;
fin>>s1;
//出错行
for(int j=0;j<s1.size();j++)
{
if(s1[j]>='A'&&s1[j]<='Z')
t1[k1++]=s1[j];
}
直接用fin>>s1读取时发现,只能读空格前的第一个字符串,而不能达到我读取整行的目的,查了资料才知道,用fin读取默认的是遇到空格则将空格前读入的字符串写入缓冲区,然后按照要求输出。这样就无法读取含空格的一整行。
解决方法一:使用getline()函数。
getline函数能够读取一整行字符串,直至换行,修改后的代码如下:
code:
string s1;
ifstream fin("in.txt");
getline(fin,s1);//这样即可以读取整行字符串
解决方法二:用字符数组代替string,即定义char s
,同样使用getline函数
code:
char
s
;
ifstream
fin("in.txt");
fin.getline(s,N);
以上两种均可以按行从文件中读取字符串。
PS:细节决定成败,不断总结才是进步之道
想从文件中读取一行字符串(含空格,如:where are
you),先贴代码:
string s1;
ifstream fin("in.txt");
ofstream
fout("out.txt");
for(int i=0;i<n;i++)
{ k1=0;
k2=0;
fin>>m1;
fin>>s1;
//出错行
for(int j=0;j<s1.size();j++)
{
if(s1[j]>='A'&&s1[j]<='Z')
t1[k1++]=s1[j];
}
直接用fin>>s1读取时发现,只能读空格前的第一个字符串,而不能达到我读取整行的目的,查了资料才知道,用fin读取默认的是遇到空格则将空格前读入的字符串写入缓冲区,然后按照要求输出。这样就无法读取含空格的一整行。
解决方法一:使用getline()函数。
getline函数能够读取一整行字符串,直至换行,修改后的代码如下:
code:
string s1;
ifstream fin("in.txt");
getline(fin,s1);//这样即可以读取整行字符串
解决方法二:用字符数组代替string,即定义char s
,同样使用getline函数
code:
char
s
;
ifstream
fin("in.txt");
fin.getline(s,N);
以上两种均可以按行从文件中读取字符串。
PS:细节决定成败,不断总结才是进步之道
相关文章推荐
- 关于比赛
- jdk的bin目录工具文件的说明
- 关于[Ljava.lang.String;@1ec8909…
- Eclipse打开工程
- android-Canvas and Drawables
- Mysql错误:Ignoring query to other database解决方法
- [深入浅出Cocoa]详解键值观察(KVO)及其实现机理
- jquery chosen 插件多选初始化
- android获取短信验证码并自动填写的实现一
- iOS小技巧14- 调试bug技巧-打印XCode的 Stack Trace信息
- java中二维数组相加并打印
- [Python标准库]re——正则表达式[五]
- 【精通iOS开发(第7版)】读书笔记02(P91~114)
- 宽字节与多字节转换函数
- zxchong的iOS bug笔记
- 关于用OC---购票系统的关键部分
- centos7安装mysql
- Hibernate 分页 查询
- 追求之门的开启,坚定有意义
- Living without D3DX