一、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]={};
|
char[]转string |
char myArr1[10]={'r','o','b'}; string myStr1(myArr1); |
char myArr1[10]={'r','o','b'}; |