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());
原文地址:https://www.cnblogs.com/mathyk/p/9813796.html