0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++字符串string

嵌入式技術(shù) ? 來(lái)源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2023-07-10 00:26 ? 次閱讀

1.string類簡(jiǎn)介

string是C++編程語(yǔ)言中的字符串。在C++中字符串處理可以使用c語(yǔ)言字符串形式char *,也可以使用string類格式。

string 是一個(gè)類,類內(nèi)有char *指針,通過(guò)容器方式管理字符串。使用string類型需要需要包含頭文件string。

2.string類的構(gòu)造函數(shù)

string類提供了多種構(gòu)造函數(shù),支持無(wú)參構(gòu)造、有參構(gòu)造、拷貝構(gòu)造。

無(wú)參構(gòu)造:
string()  
有參構(gòu)造:string(const char *str);
拷貝構(gòu)造
:string(const string &str);
初始化字符串為count個(gè)c字符:string(int count,char c);

使用示例:

#include 
#include 
using namespace std;
void test()
{
	string s1;//默認(rèn)構(gòu)造,即無(wú)參構(gòu)造函數(shù)
	char const* str = "hello,world";//c語(yǔ)言字符穿
	string s2(str);//傳入C語(yǔ)言字符串
	cout 
wKgaomSqwICAA6-pAAK9VNfkJnU317.png

3.string類賦值相關(guān)函數(shù)

string類中提供"="運(yùn)算符重載和assign全局函數(shù)進(jìn)行賦值操。這兩種方式均有多個(gè)重載版本,如下所示:

string字符串賦值
string &operator=(const char *s);//將c字符串賦給string
string &operator=(const string &s);//將s賦值給string
string &operator=(char c);//將字符c賦給string
//全局函數(shù)
string &assign(const char *s);//將c字符串賦給string
string &assign(const char *s,int n);//將c字符串前n個(gè)賦給string
string &assign(const string &s);//將s賦給string
string &assign(int n,char c);//將n個(gè)c賦給string

使用示例:

#include 
using namespace std;
#include 
void test()
{
	string s1="hello,world";//c語(yǔ)言字符串賦值
	cout 
wKgaomSqwWmAFeV0AAIlrwTEwq0242.png

4.string類字符串拼接

string類中字符串拼接有重載"+="運(yùn)算和全局函數(shù)append方式,均有多種重載版本。

運(yùn)算符重載
string &operator+=(const char *s);////將s追加到string
string &operator+=(const string &str);//將str追加到string
string &operator+=(const char c);//將字符c追加到string
全局函數(shù)append
string &append(const char *s);//將s追加到string
string &append(const char *s,int n);//將s的前n個(gè)追加到string
string &append(const string &str);//等價(jià)于operator+=(const string &str)
string &append(const string &str,int pos,int n); --從str的第pos位置開(kāi)始,取出n個(gè)字符追加到string中

使用示例:

void test()
{
	//+=運(yùn)算符重載示例
	string s1 = "C++";
	s1 += "學(xué)習(xí)";
	s1 += ',';
	cout 
wKgZomSqwjyAAdpMAAKZmJlCIUk800.png

5.字符串查找與替換

string字符串查找有find、rfind函數(shù)。其中find函數(shù)是從左往右查找,查找成功返回第一個(gè)出現(xiàn)的下標(biāo),失敗返回-1;rfind是查找最后一個(gè)出現(xiàn)的下標(biāo),失敗返回-1。 replace函數(shù)實(shí)現(xiàn)字符串替換。

//find函數(shù):從左往右查找
返回值:查找成功返回出現(xiàn)的位置,失敗返回-1
int find(const string&str,int pos=0)const;//形參pos表示開(kāi)始查找的起始位置
int find(const char *str,int pos=0)const;
int find(const char *str,int pos=0,int n)const;//從str的第pos開(kāi)始的前n個(gè)字符中str出現(xiàn)的位置
int find(const char c,int pos=0);//查找字符c
//rfind函數(shù):從右往左查找
int rfind(const string &str,int pos=npos);從pos位置開(kāi)始查找str最后一次出現(xiàn)的位置
int rfind(const char *str,int pos=npos);從pos位置開(kāi)始查找str最后一次出現(xiàn)的位置
int rfind(const char *str,int pos=pos,int n);從pos開(kāi)始的前n個(gè)字符中str最后一次出現(xiàn)的位置
int rfind(const char c,int pos=0);//查找c最后一次出現(xiàn)的位置
//字符串替換
string &replace(int pos,int n,const string &s);//將字符串的第pos位置開(kāi)始的n個(gè)字符替換成s
string &replace(int pos,int n,const char *s);

使用示例:

#include 
#include 
using namespace std;
void test()
{
	string str = "1asd3as456asd4789asd";
	int pos = str.find("asd");//查找asd第一次出現(xiàn)的位置
	cout 
wKgaomSqw1GAavHcAAMeFfb75Lo647.png

6.字符串比較

string類中字符串比較函compare數(shù)由多個(gè)重載版本,既可以和C語(yǔ)言風(fēng)格const char *字符串進(jìn)行比較,也可以和string類字符串進(jìn)行比較。相等返回0,不相等返回!0值。

字符串比較:
int compare(const char *str);//相等返回0,否則返回非0值
//比較string的len個(gè)字符,從idx位置開(kāi)始
int string::compare (size_type idx, size_type len, const string& str) const
//從指定位置指定長(zhǎng)度開(kāi)始比較
int string::compare (size_type idx, size_type len, const string&str, size_type str_idx, size_type str_len) const

使用示例:

#include 
using namespace std;
#include 
void test()
{
	string str1 = "hello,world";
	if (str1 == "hello,world")
	{
		cout 
wKgZomSqxGWAQGaUAAJlt4QiE8o833.png

7.string字符串以字符方式讀寫(xiě)

string類字符串使用字符方式訪問(wèn),可以使用重載"[]"版本函數(shù),即可以和C語(yǔ)言中訪問(wèn)方式一樣,也可以使用函數(shù)at來(lái)訪問(wèn)。

string類中對(duì)于字符串的長(zhǎng)度獲取,可以使用size()函數(shù)或者length()函數(shù)來(lái)實(shí)現(xiàn)。

string以字符方式訪問(wèn)
	char &operator[](int n);
	char &at(int n);
string 中獲取字符串長(zhǎng)度
	str.size();
	str.length();

使用示例:

#include 
#include 
using namespace std;
void test()
{
	string str = "hello,world";
	cout 
wKgZomSqxXWAWiX3AAHNa5Z8Ff8254.png

8.string字符串的插入與刪除

string類中插入函數(shù)insert支持多種插入方式,有多個(gè)重載版本。

字符串刪除可以使用erease函數(shù)實(shí)現(xiàn)。

c++插入:
string& insert(int pos,const char *s);//從第pos位置開(kāi)始插入s
string& insert(int pos,const string &s);

string &insert(int p0, const char *s, int n);//從p0位置開(kāi)始插入s,插入的s連續(xù)n個(gè)字符
string &insert(int p0,const string &s, int pos, int n);//從p0位置開(kāi)始插入s,插入的s從pos開(kāi)始,連續(xù)n個(gè)字符

string &insert(int p0, int n, char c);//從p0處插入n個(gè)字符c

c++刪除字符串
string &erase(int pos,int n=npos);//從pos位置開(kāi)始刪除n個(gè)字符

使用示例:

#include 
#include 
using namespace std;
void test()
{
	string str = "hello,";
	str.insert(2,"aaa");//從第2個(gè)位置開(kāi)始插入aaa
	cout 
wKgZomSqxi6AVvZJAAKGeGuHEG4532.png

9.子字符串提取

string類中對(duì)于子字符串的提取,可以使用函數(shù)substr實(shí)現(xiàn)。

判斷string類字符串是否為空,即長(zhǎng)度是否為0可以使用empty函數(shù)實(shí)現(xiàn)。

子字符串提取
string substr(int pos=0,int n=npos)const;//從pos位置提取n個(gè)子字符
//判斷字符串是否為空
bool empty();

使用示例:

wKgZomSqxp6AWpiFAAIBZEx4jZU077.png

10.string類轉(zhuǎn)換為char *

將string字符串轉(zhuǎn)換為char *字符串,可以使用c_str函數(shù)實(shí)現(xiàn)。

const char *c_str();
const char *data();
在c11版本之后,這兩個(gè)函數(shù)功能一致,都是將string類型字符串轉(zhuǎn)換成char *,返回一個(gè)char *字符串,以'?'結(jié)尾。

使用示例:

#include 
#include 
using namespace std;
int main()
{
	string str = "hello,world";
	const char* p = str.c_str();
	cout 
wKgZomSq33iAcHnsAAFBNkMtYHw370.png

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程語(yǔ)言
    +關(guān)注

    關(guān)注

    10

    文章

    1929

    瀏覽量

    34539
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    575

    瀏覽量

    20468
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2100

    瀏覽量

    73453
  • string
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    4715
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    string字符串和char*/char[]型型字符串的區(qū)別 相關(guān)資料分享

    概念區(qū)分在c中,是沒(méi)有string類型的數(shù)據(jù)的。但是c語(yǔ)言里有這個(gè)頭文件。容易讓人誤認(rèn)為c中有string類型的數(shù)據(jù)。區(qū)分
    發(fā)表于 07-05 07:27

    C語(yǔ)言字符串轉(zhuǎn)數(shù)字實(shí)現(xiàn)方法

    C/C++語(yǔ)言中沒(méi)有專門(mén)的字符串變量,通常用字符數(shù)組來(lái)存放字符串。字符串是以“\0”作為結(jié)束符
    發(fā)表于 11-14 17:50 ?1.3w次閱讀

    Tcl學(xué)習(xí):string compare命令對(duì)字符串的比較

    string equal則是對(duì)兩個(gè)字符串進(jìn)行簡(jiǎn)單的比較,如兩者嚴(yán)格相同,則返回1,否則返回0(與stringcompare的返回值是不同的)。
    的頭像 發(fā)表于 09-23 10:10 ?8907次閱讀

    C++字符串類學(xué)習(xí)的總結(jié)

    一般我們?cè)?b class='flag-5'>c語(yǔ)言要實(shí)現(xiàn)對(duì)字符串操作的話,一般是采用字符數(shù)組或者一組函數(shù)來(lái)實(shí)現(xiàn)的,為啥這樣做呢,那是因?yàn)?b class='flag-5'>c語(yǔ)言里面根本就沒(méi)有字符串類型的關(guān)鍵字
    的頭像 發(fā)表于 12-24 16:24 ?729次閱讀

    字符串string對(duì)象操作的全面總結(jié)

    ? ? 字符串操作看似簡(jiǎn)單,其實(shí)非常重要,不注意的話,經(jīng)常出現(xiàn)代碼運(yùn)行結(jié)果和自己想要的不一致,甚至崩潰。本文總結(jié)了一些構(gòu)建string對(duì)象方法、修改string對(duì)象的方法、string
    的頭像 發(fā)表于 11-11 11:23 ?1901次閱讀
    <b class='flag-5'>字符串</b><b class='flag-5'>string</b>對(duì)象操作的全面總結(jié)

    C語(yǔ)言總結(jié)_字符串全方位練習(xí)

    C語(yǔ)言字符串全方位練習(xí),涉及知識(shí)點(diǎn):字符串解析、大小寫(xiě)判斷、字符串插入、字符串刪除、字符串排序、
    的頭像 發(fā)表于 08-14 09:41 ?1435次閱讀

    關(guān)于STEP7庫(kù)功能字符串轉(zhuǎn)換

    :庫(kù)libraries---Standard Libray---TI-S7 Converting Blocks) FC編號(hào) 功能名稱 描述 FC5 DI_STRING 雙整數(shù)轉(zhuǎn)字符串 FC16
    的頭像 發(fā)表于 10-10 10:50 ?4006次閱讀

    字符串類型以及C++語(yǔ)言布爾類型

    C風(fēng)格字符串;char+變量名+[ ]=”字符串值” (可以隨便定義變量名,也就是用變量名代替某一大字符,可以簡(jiǎn)單很多。)
    的頭像 發(fā)表于 02-21 15:40 ?993次閱讀
    <b class='flag-5'>字符串</b>類型以及<b class='flag-5'>C++</b>語(yǔ)言布爾類型

    C語(yǔ)言字符串的引用方式

    C語(yǔ)言程序中,字符串是存放在字符數(shù)組中的。 2. 用字符數(shù)組存放一個(gè)字符串,可以通過(guò)數(shù)組名和下標(biāo)引用
    的頭像 發(fā)表于 03-10 14:57 ?1819次閱讀

    C++入門(mén)之string

    前一篇文章我們已經(jīng)了解了C++中的基本類型,C++還提供了很多抽象數(shù)據(jù)類型,例如字符串string,string包含多個(gè)
    的頭像 發(fā)表于 03-17 13:58 ?530次閱讀

    代碼字符串分割方法

    String#split 來(lái)分割。 使用 String#split 方法 String 類中 split 方法,是我們平常處理字符串分割最常用的方法之一,它可以根據(jù)給定的分隔符或正
    的頭像 發(fā)表于 09-25 11:42 ?763次閱讀

    c語(yǔ)言字符串定義

    C語(yǔ)言是一種強(qiáng)大而廣泛使用的編程語(yǔ)言,字符串是其中一個(gè)非常重要的概念。在C語(yǔ)言中,字符串是由一系列字符組成的數(shù)組,它可以表示文本、數(shù)字等各種
    的頭像 發(fā)表于 11-24 10:02 ?1740次閱讀

    oracle中拼接字符串函數(shù)

    在Oracle中,我們可以使用 CONCAT 函數(shù)來(lái)拼接字符串。CONCAT 函數(shù)接受兩個(gè)參數(shù),它將這兩個(gè)參數(shù)連接起來(lái)并返回相應(yīng)的字符串結(jié)果。 語(yǔ)法示例: CONCAT(string
    的頭像 發(fā)表于 12-06 09:49 ?2748次閱讀

    oracle字符串split成多個(gè)

    。本文將全面詳解Oracle字符串分割方法的使用、語(yǔ)法、注意事項(xiàng)以及實(shí)際應(yīng)用場(chǎng)景等。 一、基本語(yǔ)法 Oracle字符串分割方法的基本語(yǔ)法如下: SELECT REGEXP_SUBSTR( string
    的頭像 發(fā)表于 12-06 09:54 ?5024次閱讀

    鴻蒙TypeScript學(xué)習(xí)第10天:【String字符串)】

    String 對(duì)象用于處理文本(字符串)。
    的頭像 發(fā)表于 04-08 14:32 ?725次閱讀
    鴻蒙TypeScript學(xué)習(xí)第10天:【<b class='flag-5'>String</b>(<b class='flag-5'>字符串</b>)】