关于string对象的按行读写

  今晚在做题时遇到了关于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:细节决定成败,不断总结才是进步之道


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值