C++中stringstream样例

包含头文件 #include <sstream>  

初始化可以使用 clear()、 str( ) 赋值;

这里的clear方法,实际上是清空stringstream的状态(比如出错等),清空内容需要使用.str("")方法

直接调用str()方法可以返回 returns a string object with a copy of the current contents of the stream.

可以使用<<输入和>>输出

string s;
stringstream ss;
int a, b, c;
getline(cin, s);
ss.clear();
ss.str(s);
ss >> a >> b >> c; //这里默认空格直接会分词,而且即使abc的类型不同还是可以的,相当于灵活类型转换
string s;
stringstream ss;
int n, i, sum, a;
cin >> n;
getline(cin, s); // 读取换行符
for (i=0; i<n; i++)
{
    getline(cin, s);
    ss.clear();
    ss.str(s);
    sum=0;
    while (1)
    {
        ss >> a;
        if ( ss.fail() ) break; //fail()判断是否到底
        sum+=a;
    }
    cout << sum << endl;
}

  

    //stringstream用于split很方便  
    string a, b, c, d;  
    string lines="adfa;asdfasd;fasdf;ccc";   
    stringstream line(lines);  //可以直接初始化
    getline(line, a, 'f');  
    getline(line, b, ';');  
    getline(line, c, ';');  
    getline(line, d);     //与不同的getline搭配
    cout<<"a = "<<a<<endl;  
    cout<<"b = "<<b<<endl;  
    cout<<"c = "<<c<<endl;  
    cout<<"d = "<<d<<endl;  

  还有个问题:这里默认的分词都是空格,那么如果是其他的比如逗号怎么做

 可以用如下代码:

#include <iostream>
#include <stdlib.h>
#include <sstream> 
#include <cstring> //使用到c_str(),strtok函数

using namespace std;
int main()

{
	string my_string;  
  	while(getline(cin, my_string, 'n')) {   
   	 char *pch;  
   	 cout << my_string  << endl;  
   	 char str[128];  
     //c_str()返回的是一个临时指针,不能直接复制  
   	 strcpy(str, my_string.c_str());   
   	 //char* str; 
   	 //str=const_cast<char*>(my_string.c_str()); 也可以直接使用char* c_str()返回的是常量的指针,所以作了const_cast转换 
   	 cout << str << endl;  
   	 pch = strtok(str, " -,.");  // 空格,'-',',','.'都是分隔符  ,其实也是把这个分隔符替换为空格
   		while(pch != NULL) {  
     		 cout << pch << endl;  
     		 pch = strtok(NULL, " -,.");  // 注意这里是NULL  
    	}  
	}  
   return 0;	
}

  函数strtok的格式:char* strtok (char* str,constchar* delimiters );

------------------------------------------------------------

华为机试1:
字符串最后一个单词的长度

#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;

int main(){
    string str,res;
    getline(cin,str); //只能使用getline函数来读入直到换行符
    if(str.length()>5000) return 0;
    stringstream s;
    s.clear();
    s.str(str);
    while(1){
        s>>res;
        if(s.fail()) break;
    }
    cout<<res.length();
    return 0;
}

 华为机试题2:简单错误记录

C++中stringstream样例

string getfilename(string file){
    int pos;
    pos=file.rfind('\');
    file=file.substr(pos+1,file.length()-pos); //使用rfind和substr函数获取
    if(file.length()>16)
        file=file.substr(file.length()-16,16);  //pos是从0开始的
    return file;
}

  使用了string的rfind函数,find从前往后找,rfind从后往前,如果没找到会返回string::npos

C++中stringstream样例

 

原文链接: https://www.cnblogs.com/zhang-qc/p/9048977.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++中stringstream样例

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/274163

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 上午12:07
下一篇 2023年2月15日 上午12:07

相关推荐