字符串流stringstream

 示例代码:需要头文件<sstream>

  ifstream infile(m_simFilePath.c_str()); //m_simFilePath是相似度矩阵所在的文件路径(成员变量)
  if(!infile)        //通过string类成员函数c_str()把string转换成c中的字符串样式:constchar*,infile函数的参数为const char*,'.c_str()'转化后的带有‘\0’结尾,'.data()'转化后的不带
  {
   cout<< "Unable to open the file: "<< m_simFilePath<< endl;
   assert(false);
  }
  string line;
  while(getline(infile,line))  //getline第三个参数默认为终结符‘\n’
  {
   stringstreamstrm(line); //string类型的line赋值给字符串流strm,空格换行指标都会被当做切分符,相当于stringstreamstrm;strm<<line;
   intidx1 = 0;
   int idx2 =0;
   doublesim  = DBL_MIN;
   strm>> idx1>> idx2>> sim; //分隔成三个word? 这是啥意思???????????????????
    S[idx1][idx2]= sim;
  }

—————————————————————————————————————————————————

字符串处理:split类似功能

#include<string>
#include<sstream>
int num=0;
stringstr="aaaaaa_bbbbbbb_ccccccc";
for (inti=0;i<str.length();i++)
{
       if (str[i]=='_')
        {
	num++; //num记录要分割成多少次
	str[i]=' ';//stringstream只能拆分非空字符,所以用空格替换分隔字符
        }
}
string *array=new string[num]; //分割后的字符串就存在这里了
stringstream ss;
ss<<str;
for (intj=0;j<num;j++)
{
	ss>>array[j]; //以空白字符作为分隔符,分隔后保存到array
}

 ————————————————————————————————————————————————

字符串流又一应用,拆分句子,getline适用于任何输入流:

istream& getline (char* s, streamsize n ); 
istream& getline (char* s, streamsize n, char delim );

从网上download下一个page,保存为string型,then:

stringstream strm(page);
while(getline(strm,line))
。。。。。

总之,处理文本最好先拆分,不要用一个大循环,设置很多flag,很乱且调试非常恶心!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值