文章目錄
STL提供了處理字符串的string類型,可滿足對字符串的一般應用。 string類型支
持可變長度的字符串,C++標準庫負責管理和存儲相關內存,並提供各種接口。 string類
型支持大多數順序容器的操作,因此也可以認爲是字符容器,但它不支持以棧的方式操作
容器,因此在string中不能使用front、back和pop_back操作。
1. string類型的初始化
要使用string類型,必須包含相關頭文件:
#include
string標準庫支持多個構造函數,因此初始化string對象的方式有多種:
strings1; //定義串s1,s1爲空串
strings2(s1); //用s1初始化s2
strings3(″abcdefg″); //用字符串″abcdefg″初始化s3
strings4(s3,2); //用s3的前兩個字符構成的字符串初始化s4,即s4=″ab″
strings5(s3.begin(),s3.begin()+2); //s5=″ab″
strings6(s3,2,3); //s6爲s3的第個字符(起始爲)開始連續個字符構成的字
符串″cde″
strings7(5,'x'); //將s7初始化爲個字符'x'的副本,即s7=″xxxxx
2. string對象的基本操作
操作接口示例 (s1、s2均爲string對象) | 說明 |
---|---|
s1=s2 | 將s2的副本賦值給s1 |
s1.empty() | 如果s1爲空串,返回true,否則返回false |
s1.size() | 返回s1中字符的個數 |
s1[n] | 返回s1中位置爲n的字符,位置從0開始計 |
==,!=,<,<=,>,>= | 關係運算符保持原有的含義 |
s1+=s2或s1=s1+s2 | 將s2表示的串追加到s1的後面形成新串 |
s1.insert(pos,s2) | 在下標爲pos的元素前插入s2表示的串 |
s1.insert(pos,cp,len) | 在下標爲pos的元素前插入cp所指串的前n個字符 insert操作還有很多用法,在這裏不再一一列舉 |
s1.c_str() | 返回s1表示的串的首地址 |
s1.substr(pos, n) | 返回一個string類型的字符串,包含s1中從下標pos開始連續n個字符 |
s1.append(s2) | 將s2表示的串追加到s1的後面形成新串 |
s1.append(cp) | 將字符指針cp指向的串追加到s1的後面形成新串 |
s1.replace(pos,len,s2) | 刪除s1中從下標pos開始的len個字符,並用s2替換之 |
s1.find(s2, pos) | 從s1下標爲pos的位置開始查找s2,找到後返回s2第一次出現的位置,若沒找 到,返回值string::npos |
s1.rfind(s2, pos) | 從s1下標爲pos的位置開始查找s2,找到後返回s2最後一次出現的位置,若沒 找到,返回值string::npos |
s1.find_first_of(s2,pos) | 從s1下標爲pos的位置開始查找s2中的任意字符,找到後返回第一次出現的 位置 |
s1.find_last_of(s2,pos) | 從s1下標爲pos的位置開始查找s2中的任意字符,找到後返回最後一次出現 的位 |
來自《數據結構與STL(徐雅靜、肖波編著)(第2版)》
3.字符串與字符數組
//(1)複製到字符串數組中
char* cp = newchar [s1.size()+1];
strcpy(cp ,(char*) s1.c_str ()) ; //cp =″abkxyzcxyz1234
//(2)string --> char *
string str("OK");
char * p = str.c_str();
//(3)char * -->string
char *p = "OK";
string str(p);
4.字符串與數字之間的轉換
http://c.biancheng.net/view/1527.html
https://www.cnblogs.com/dingxiaoqiang/p/7678477.html
利用stringstream
#include <iostream>
#include <String>
#include<sstream>
using namespace std;
int main()
{
/* 字符串轉數字*/
string a = "123.32";
double res;
stringstream ss;
ss << a;
ss >> res;
cout << res << endl;
/* 數字轉字符串*/
double a = 123.32;
string res;
stringstream ss; // 定義流ss
ss << a; //將數字a轉化成流ss
ss >> res; //將流ss轉化成字符串
return 0;
return 0;
}
to_string
to_string(T value) 函數來將 T 類型的數字值轉換爲字符串形式:
string to_string(int value)
string to_string(long value)
string to_string(double value)
#include <String>
#include <iostream>
using namespace std;
int a = 5;
string str = to_string(a*a);
cout << " The square of 5 is " << str << endl;
5. Vs2017 使用 strcpy 報錯
提示 strcpy 是不安全的,需要用 strcpy_s 代替
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str1[11] = "hello";
char str2[12] = "world";
char str3[11];
int len;
//複製str1到str2
strcpy_s(str3, str1);
cout << "strcpy(str3, str1):" << str3 << endl;
return 0;
}
6.字符串遍歷
string s1 = "abcdefg";
//1.通過數組方式遍歷
for (int i = 0; i < s1.length(); i++)
{
cout << s1[i] << " ";
}
//2.通過迭代器遍歷
for(string::iterator it = s1.begin(); it!= s1.end(); it++)
{
cout << *it << " ";
}
//3.通過at()方式遍歷
for (int i = 0; i < s1.length(); i++)
{
cout << s1.at(i) << " "; //此方式可以在越界時拋出異常
}