zoukankan      html  css  js  c++  java
  • C++中的string和stringstream用法1

    一、string

      string 是 C++ 提供的字符串类型,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能。要使用 string, 必须先加入这一行:

    #include <string>
    using namespace std;

      接下來要定义一个字串变量,可以写成:string s;     我们也可以在定义的同时初始化字串:string s = "you";而要取得其中某一个字元,和传统C 的字串一样是用 s[i] 的方式取得。比较不一样的是如果 s 有三个字元,传統 C 的字串的 s[3] 是'' 字符,但是 C++ 的 string 则是只到 s[2] 这个字符而已。

      字符串内存存储位置:数据<=16字节,在当前栈区;数据>16字节,在堆区

    做一个对照:

    操作 string 字符数组
    定义字符串 string s; char s[100];
    取得第i个字符 s[i] s[i]
    字符串长度 s.length()
    或 s.size()
    strlen(s)
    读入一行 getline(cin, s); gets(s);
    赋值 s = "you"; strcpy(s, "you");
    字符串连接 s = s + "you";
    s += "you";
    strcat(s, "you");
    字符串比较 s == "you" strcmp(s, "you");

    两个string常用的方法是find和substr。在下面的代码当中:find函数从str的第3个位置查起,找到ssdf这个子串后,返回子串的位置。而substr函数从pos位置开始,截取5个字符,赋值给str2。也就是说,str2之后的内容将是ssdfs。

    string str = "aaaaddddssdfsasdf";  
    size_t pos = str.find("ssdf", 3);
    string str2 = str.substr(pos, 5);

    二、stringstream

    stringstream是 C++ 提供的另一个字串型的串流(stream)物件,和之前学过的iostream、fstream有类似的操作方式。要使用stringstream, 必须先加入这一行:

    #include <sstream>

    stringstream主要是用在將一个字符串分割,可以先用.clear( )以及.str( )將指定字串设定成一开始的內容,再用>>把个別的资料输出。

    举个例子:

    題目:输入的第一行有一个数字 N 代表接下來有 N 行资料,每一行资料里有不固定个数的整数(最多20个,每行最大200个字元),编程將每行的总和打印出來。

    输入:

    3
    1 2 3
    20 17 23 54 77 60
    111 222 333 444 555 666 777 888 999

    输出:

    6
    251
    4995

    #include <iostream>
    #include <string>
    #include <sstream>
    using namespace std;
    int main()
    {
        string s;
        stringstream ss;
       ss.str(""); //清除ss缓存
    ss.clear(); //在多次转换中使用同一个stringstream对象
    int n; cin >> n; getline(cin, s); //读取换行 for (int i = 0; i < n; i++) { getline(cin, s); ss.clear(); ss.str(s); int sum = 0; while (1) { int a; ss >> a; if(ss.fail()) break; sum += a; } cout << sum << endl; } return 0; }
        
    //C++11的to_string将基本类型转成字符串类型
    double d = 9.133; string strD = to_string(d); cout<<"d:"<<strD<<endl; //d:9.133000 //运用stringstream进行转换,基本类型转字符串类型 stringstream ss; ss<<"d:"<<d; cout<<ss.str()<<endl; //d:9.133

    三、string与char[]的转换

      C方式 C++方式
    string转char[]
    string myStr = "oppo";
    char myArr[100] ={};  //C++给数组赋初值
    //memset(myArr,0,strlen(myArr));//C给数组赋初值
    memcpy(myArr,myStr.data(),myStr.length());
    cout<<myArr<<endl;
    char myArr[100]={};
    stringstream mySs; mySs
    <<"rocket"; //读入 mySs>>myArr; //输出 cout<<myArr<<endl;
    char[]转string
    char myArr1[10]={'r','o','b'};
    string myStr1(myArr1);
    cout
    <<myStr1<<endl;
     
    char myArr1[10]={'r','o','b'};
    stringstream mySs;
    mySs<<myArr1;
    string myStrs(mySs.str());
  • 相关阅读:
    Sharepoint 2010:基于当前用户判断访问列表项目的权限 Determine access to SPListItem based on a Current User
    vs2010修改sharepoint部署站点
    写入数据内存溢出的错误ErrorCode=2147217900解决
    新鲜网络故障:网线测试器测试,居然2,3信号灯齐亮!解决
    CuteEditor出错了,居然是没有了lic文件
    路由表的故障?如何理解设置
    MSSQL如何快速清除数据库日志转,经实践有效
    iis中web站点无法启动:另一程序正在使用该文件,进程无法访问解决
    二次开发图片浏览系统应用Lightbox image viewer 2.03a并带javascript的字符串处理
    asp session丢失的分析和解决方法
  • 原文地址:https://www.cnblogs.com/mathyk/p/9813796.html
Copyright © 2011-2022 走看看