关于string对象的按行读写

本文介绍了在C++中使用标准输入输出流读取含空格的字符串时遇到的问题,并提供了两种解决方案:一是使用getline()函数替代>>操作符;二是采用字符数组结合getline()函数的方式。
  今晚在做题时遇到了关于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[N],同样使用getline函数

code:
    char s[N]; 
   ifstream fin("in.txt");
   fin.getline(s,N);

以上两种均可以按行从文件中读取字符串。

PS:细节决定成败,不断总结才是进步之道


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值