zoukankan      html  css  js  c++  java
  • 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, '
    ')) {   
       	 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:简单错误记录

    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

  • 相关阅读:
    6174问题
    阶乘的精确值
    小学生算术
    Primer回顾 数组和指针
    Primer回顾 标准库类型
    绪论
    字符串的存储
    条款39:明智而审慎的使用private继承
    条款34:区分接口继承和实现继承
    条款33:避免遮掩继承而来的名称
  • 原文地址:https://www.cnblogs.com/zhang-qc/p/9048977.html
Copyright © 2011-2022 走看看