string 方法若干

2021-05-24 14:32:21 字數 4507 閱讀 8830

string 類提供字串處理函式,利用這些函式,程式設計師可以在字串內查詢字元,

提取連續字串行(稱為子串),以及在字串中刪除和新增。我們將介紹一些主要函式。

標頭檔案:

#include

using namespace std;

1.函式find_first_of()和 find_last_of() 執行簡單的模式匹配,如在字串中查詢單個字元c。

函式find_first_of() 查詢在字串中第1個出現的字元c,而函式find_last_of()查詢最後

乙個出現的c。匹配的位置是返回值。如果沒有匹配發生,則函式返回-1.

int find_first_of(char c, int start = 0):

查詢字串中第1個出現的c,由位置start開始。

如果有匹配,則返回匹配位置;否則,返回-1.預設情況下,start為0,函式搜尋

整個字串。

int find_last_of(char c):

查詢字串中最後乙個出現的c。有匹配,則返回匹配位置;否則返回-1.

該搜尋在字元末尾查詢匹配,所以沒有提供起始位置。

示例:string str = "mississippi";

int index;

// 's ' 在index 為 2、3、5、6處出現

index = str.find_first_of('s',0);    // index為 2

index = str.find_first_of('s',4);    // index為 5

index = str.find_first_of('s',7);    // index為 -1

// 's ' 的最後出現在 index= 6

index = str.find_last_of('s');

// while 迴圈輸出每個'i'的index

while((index = str.find_first_of('i', index))!= -1)

輸出結果: index 1 index 4 index 7 index 10

2.字串中提取連續字串行,既子串。

這個操作假定位置 start 和 字元數 count.

string substr(int start=0,int count= -1);

從起始位置開始複製字串中的count 個字元,並返回這些字元作為子串。

如果字串尾部小於count字元或者count 為-1,則字串尾停止複製。

如果不使用引數呼叫只包括位置start,則substr()返回從位置開始到字串尾部的子串。

find()函式在字串中查詢指定模式。該函式將字串s和位置start作為引數,並查詢

s的匹配作為子串。

int find(const string& s,int start = 0):

該搜尋獲得字串s和位置start,並查詢s的匹配作為子串。

如果有匹配,則返回匹配的位置;否則返回-1。預設情況下,

start為0,函式搜尋整個字串。

示例string fullname = "mark tompkin", firstname, lastname;

int index;

index = str.find_last_of(' ');   // index is 4

// firstname = "mark" lastname = "tompkin"

firstname = fullname.substring(0,index);

lastname = fullname.substring(index+1);

index = fullname.find("kin");         // 在 index = 9 匹配 "kin"

index = fullname.find("omp",0);    // 在 index = 6 匹配 "omp"

index = fullname.find("omp",7);    // index is -1 (無匹配)

3.新增和刪除字串

字元連線(+、+=)是在字串尾新增字串。insert()函式擴充套件了這個能力,

允許在任意位置新增字串。為了從字串。為了從字串中刪除字串,

函式erase()可以從指定的位置開始刪除字元。

void insert(int statr,const string& s):

將子串s放入字串中,起始於位置start。插入操作增加了原始字串的長度。

void erase(int start=0,int count=-1):

從start開始,從字串中刪除count個字元。如果現有的字串少於count個

字元,或者count為-1,則刪除到字串尾部的所有字元。預設情況下,start為0,函式

從字串是起始位置開始刪除字串。預設情況下,函式也刪除到字串尾。

需要注意的是,不使用引數呼叫erase()函式時,將把字串截斷為長度為0的空字串。

示例:string str = "endfile";

string s = "string object type";

str += " mark";

str.inset(3,   "-of-"); // str 是 "end-of-file mark"

s.erase(7,7);        // s 是 "string type"

// 從index 為3處刪除4個字元

s.erase(3,4);

cout << s;          // 輸出:"strtype"

4.c_str()返回c語言風格字串的位址。

將字串物件轉換為c語言風格字串。

char *c_str();

返回乙個等價於字串物件的c語言風格字串的位址。返回型別char*表示c

語言風格字串第1個字元的位址。

示例:string filename = "input.dat";

// open 要求檔名是c語言風格的字串

fin.open(filename.c_str());

5.分離字串路徑的方法

處理檔案的程式可能要分析檔名。這種演算法要進行字串處理。檔案可以

由路徑名指定,路徑名包括由分隔符"/"分割的名稱集。最後乙個"/"前的名稱序列

稱為路徑。最後乙個名稱是檔名,還可能包括副檔名。

路徑名    /class/programs/testfile.cpp

路徑        /class/programs/

檔名     testfile.cpp

副檔名     cpp

為了分析檔名,我們從鍵盤讀入完整的路徑名,並輸出路徑和檔名。

如果檔名具有副檔名"cpp",則在建立可執行檔名時,將用"exe"替代副檔名"cpp".

下面是程式結構的輪廓,以及如何使用字串函式的說明:

1.輸入檔名,使用函式find_last_of()在字串中搜尋最後乙個出現的"/"。這個字元

確定了路徑的結尾和檔名的開始。

2。路徑是由最後乙個"/"前所有字串組成的子串。檔名是最後乙個"/"後的

所有字元。使用最後乙個"/"的位置和substr()提取出路徑和檔名。

3.副檔名是檔名中最好乙個"."後的字串。呼叫find_last_of()搜尋最後乙個匹配,

則複製檔名,刪除當前副檔名,並新增新的副檔名"exe"。 輸出產生的可執行檔名。

// 檔案prg1_3.cpp

// 此程式提示使用者輸入檔案的路徑

// 它使用string類操作來識別並輸出

// 路徑名和檔名。如果檔名有

// 副檔名"cpp",則建立並輸出

// 可執行檔案的名稱,其擴充套件名為"exe",替換

// 副檔名"cpp"

// wj.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

#include

using namespace std;

int main()

return 0;

}      

輸出結果:

第1次允許結果:

enter the path name: /class/programs/testfile

path:          /class/programs

filename:    testfile

第2次允許結果:

enter the path name: programs/strings/filedemp.cpp

path:            programs/strings

filename:      filedemo.cpp

executable:   filedemo.exe

第3次允許結果:

enter the path name:   /program.cpp

path:

filename:    program.cpp

executable: program.exe

string中若干函式的理解

由於學識有限,所以顯得積累的重要性。標準庫中string的find以及resize的理解。size type find const basic string str,size type index 從index開始查詢str size type find const char str,size ty...

專案優化的若干方法

近期經常聽到現場人員和測試人員反映我們的專案訪問時間長,頁面響應速度比較慢。一直想對這個問題進行跟蹤處理。趁現在時間較少時做了些許試驗,有以下結論 1.專案中大量使用了js,並封裝了大量的js控制項,每個頁面需要引入的js檔案一般在30個左右,這種過多的js檔案引入會影響頁面響應速度。2.專案中使用...

素數的若干求解方法

最直觀的方法,根據定義,因為質數除了1和本身之外沒有其他約數,所以判斷n是否為質數,根據定義直接判斷從2到n 1是否存在n的約數即可。c 如下 cpp view plain copy bool isprime 1 intnum 上述判斷方法,明顯存在效率極低的問題。對於每個數n,其實並不需要從2判斷...