字串擷取以及字元陣列和字元指標的區別

2021-07-02 21:52:46 字數 2181 閱讀 9849

今天早晨在研究字串擷取時,查閱了很多資料。結果自己吧自己搞糊塗了。網上一些結論不一定都是正確的。

我在這裡寫出一些我自己的感悟,如果有不對的地方,真的真的希望大家趕緊幫我指正出來,萬分感謝!!!

回到正題,首先先說一下字串擷取,畢竟萬事都有個頭兒嘛,鹽打哪鹹,醋打哪酸。糾結一早晨,還是因為字串擷取引發的血案。

string s = "1+2+6";

要求將+去掉,並且截取出其他的字串。s 應該擷取為1,2,6。

在網上查詢資料,這是引用**

發現這個比較全。

嘗試第一種方法

char s = "1+2+6";

char* delim = "+";

char* p;

char* str = strtok(s,delim);

log("%s",str);

while ((p = strtok(null,delim)))

但是這種方法要求原字串必須是 char 這就比較糾結。因為這是c函式,c裡面沒有string,所以不用string型別我還能理解。但是我想用char* s = 「1+2+6」; 這樣也不行。想進strtok裡面看看也進不去。於是我就想字元陣列和字元指標到底有什麼不同?

於是我又查詢資料,這是引用**

自己又嘗試**除錯

#include using namespace std;

void main()

{ char* p1 = "1+2+6";

char p2 = "1+2+6";

cout<

這是輸出結果:

1+2+6

1+2+611

221+2+6

1+c+611

請按任意鍵繼續. . .

總結如下:

陣列:1、char temp = "123456"; temp是陣列首位址,*temp 就是 temp[0]。

2、陣列中的元素可以修改值。

3、陣列必須付給初始值。

指標:1、char * temp = "123456";temp是一塊記憶體空間,可以不付給初始值。temp是字串的首位址。*temp 就是字串的第乙個字元。

2、字串中的元素不可以修改值。

所以除錯之後發現基本沒啥收穫,只是肯定了一下以前的知識。

那麼,再回到字串擷取這個事兒上。由於方法一只能用char。這讓我很不爽,所以不用了。

最後用標準模板庫的兩個函式實現了要求。

#include #include using namespace std;

//字串分割函式

std::vectorsplit(std::string str,std::string pattern);

void main()

{ string s = "1+2+6";

coutfor (size_t i=0;isplit(std::string str,std::string pattern)

{ std::string::size_type pos;

std::vectorresult;

str+=pattern;

//擴充套件字串以方便操作

size_t size=str.size();

for(size_t i=0; i

執行結果如下:

1+2+612

6請按任意鍵繼續. . .

這裡用的主要是 find 和 substr 這兩個函式,下面這段是摘抄過來的。我就當是寫筆記了,所以見諒。

1、find函式

原型:size_t find ( const string& str, size_t pos = 0 ) const;

功能:查詢子字串第一次出現的位置。

引數說明:str為子字串,pos為初始查詢位置。

返回值:找到的話返回第一次出現的位置,否則返回string::npos 

2、substr函式

原型:string substr ( size_t pos = 0, size_t n = npos ) const;

功能:獲得子字串。

引數說明:pos為起始位置(預設為0),n為結束位置(預設為npos)

返回值:子字串 

另外,size_t是乙個 與 系統 相關 的 c標準庫 中的 資料型別。和 int 相似。

字串擷取和字串替換

substring 叫做擷取字串,split叫做字串分割 substring擷取,下面是從第0位擷取前3個 說白了是從第一位擷取前3個 中的0索引就是我們常說的第一位 列印結果 用一生 split擷取,下面是通過 擷取,把字元分為6部分 string txta 用,一,生,下,載,你 string ...

字串和字串陣列

字串陣列 include int main int argc,const char ar printf name1 s n name1 name1 zhangsan 部分初始化中,沒有被初始化的元素預設是0,0 對應的ascii值是 0 char name2 9 printf name2 s n n...

字串擷取

var 用 擷取 刪除左邊字元,保留右邊字元 echo 其中 var 是變數名,號是運算子,表示從左邊開始刪除第乙個 號及左邊的所有字元 結果 root localhost shell shell.sh 表示從左邊開始刪除最後 最右邊 乙個 號及左邊的所有字元 結果 將變數改為var 結果 輸出為空...