c和c 中字串的擷取

2021-07-27 07:01:24 字數 4533 閱讀 1919

c字串和c++字串 

在c中,並沒有字串這個資料型別,而是使用字元陣列來儲存字串。c字串實際上就是乙個以null('\0')字元結尾的字元陣列,null字元表示字串的結束。需要注意的是:只有以null字元結尾的字元陣列才是c字串,否則只是一般的c字元陣列。

c字串定義時可以利用"="號進行初始化,但是以後不能利用"="對c字串進行賦值。對c字串的操作需要通過"string"檔案中定義的字串處理函式。例如:

//字串的初始化

char a[11] = "huanying";

//字串的賦值

strcpy(a,"nihao")

//獲取字串的長度,不包括'\0'在內

strlen(a);

printf("%s",a);

在c中也可以使用字元指標來訪問乙個字串,通過字元指標指向存放字串陣列的首元素位址來進行訪問.

char *a = "nihao";

printf("%s",a);

在c++中則把字串封裝成了一種資料型別string,可以直接宣告變數並進行賦值等字串操作。以下是c字串和c++中string的區別:

c字串 

string物件

所需的頭檔名稱 或或

為什麼需要標頭檔案 

為了使用字串函式 

為了使用string類

如何宣告 

char name[20]; 

string name;

如何初始化 

char name[20]="nihao"; 

string name = "nihao";

必須宣告字串長度麼? 是 

否使用乙個null字元麼? 

是  否

怎樣實現字串賦值 

strcpy(name,"john"); 

name = "john";

其他優點 

更快 更易於使用,優選方案

可以賦乙個比現有字元更  不能 

可以長的字串麼? 

c++常用字串函式

char s1="i am a student";

char s2[20]="teacher";

char s3="student";

int result;

char s4[20],*p;

(1)串長度 int strlen(char *str)

cout< 輸出14

cout< 輸出7

(2)串拷貝 char *strcpy(char *str1,char *str2)

strcpy(s4,s2);  //s4為"teacher"

(3)串連線 char *strcat(char *str1,char*str2)

strcat(s2,s3);  //s2為"teacherstudent"

//注意:如果使用字元陣列存放字串,strcat函式並不檢查第乙個陣列是否能夠容納第二個字串,這樣多出來的字串就會溢位到相鄰的儲存單元而出現問題。

(4)串比較 int strcmp(char *str1,char *str)  //比較的是對應字元的ascii碼值,如果str1>str2,返回1

result=strcmp(s2,s3); 

//result>0

result=strcmp(s2,s2); 

//result=0

result=strcmp(s3,s2); 

//result<0

(5)串定位 char *strchr(char *str,char ch)

p=strchr(s1,'s'); 

//找到返回字元在字串中的位置,否則返回-1

strcpy(p,s2); 

//s1為"i am a teacher"

(6)在乙個串中查詢是否存在和另乙個串相等的子串

(7)擷取子串形成乙個新串

字串的輸入

(1)方法一:使用輸入操符來填充乙個c字串變數

例如:char a[80];

cin>>a;

注:以這種方式來讀取c字串時,會忽略最初的空白字元(空格、製表符和換行符),而且輸入會在下乙個空格或者換行符處停止。

(2)方法二:使用預定義函式getline獲取整行輸入(包括空格)

getline函式有兩個引數:第乙個引數用於接收輸入的c字串變數;第二個引數用於規定getline最多能接收的字元個數。

例如:char a[80];

cin.getline(a,80);

當遇到行結束的時候,輸入才會停止。

c++ string類的輸入

(1)方法一:和c字串輸入的方法一相同。

(2)方法二:使用getline函式。

例如:string a;

getline(cin,a);

string物件和c字串之間的轉換

可以將c字串儲存在string型別的變數中,例如:

char a = "nihao";

string b;

b=a;

但string物件不能自動的轉換為c字串,需要進行顯式的型別轉換,需要用到string類的成員函式c_str().

例如:strcpy(a,b.c_str());

字串到數字的轉換

atoi函式獲取乙個c字串引數,返回對應的int值。如果引數不與乙個int值對應,atoi就會返回0。atoi函式在檔案為cstdlib的庫中。如果數字太大,不能轉換成int型別的值,可以使用atol將字串轉換為long型別的值。

例如:atoi("1234"); 

//返回整數1234

atoi("#123"); 

//返回0

擷取字串子串 (1)(gbk)

** @param string $str 原始字串

* @param int $len 需要擷取字串的長度

* @return string 返回擷取到的字串

*/function gbsubstr($str, $len)

return substr($str, 0, $i);}

乙個這樣的字串:「123,456,789,0」。把他擷取成這樣的字串陣列 [123],[456],[789],[0]。眾所周知c++預設沒有提供這樣功能的函式,下面我們自己來實現它

不多說直接上**:

c++**

#include

#include

#include

using namespace std; 

vectorsplitex(const string& src, string separate_character) 

string laststring = src.substr(lastposition);//擷取最後乙個分隔符後的內容 

if (!laststring.empty()) 

strs.push_back(laststring);//如果最後乙個分隔符後還有內容就入隊 

return strs; 

} int _tmain(int argc, _tchar* argv) 

return 0; 

} #include

#include

#include

using namespace std;

vectorsplitex(const string& src, string separate_character)

string laststring = src.substr(lastposition);//擷取最後乙個分隔符後的內容

if (!laststring.empty())

strs.push_back(laststring);//如果最後乙個分隔符後還有內容就入隊

return strs;}

int _tmain(int argc, _tchar* argv)

return 0; }

輸出:123456

7890

888

c++ 字串擷取相關函式講解 1 cstring res;

2 cstring str = _t("abcdefghijklmn");

3 res = str.mid(2,3);  //從第3位字母開始,共取3個字元

4 assert(res == _t("cde"));

56 res = str.left(3);  //從左邊數起,共取3個字元

7 assert(res == _t("abc"));

89 res = str.right(3);  //從右邊數起,共取3個字元

10 assert(res == _t("lmn"));

1112 res = str.spanincluding(_t("edcba"));  //遇到引數裡沒有的字元即停下,返回停下之前的字串

13 assert(res == _t("abcde"));

1415 res = str.spanexcluding(_t("fgb"));  //遇到引數裡面有的字元即停下,返回停下之前的字串

16 assert(res == _t("a"));17

C 中字串的擷取

string str 123abcd456 int i 3 1 取字串的前i個字元 str str.substring 0,i or str str.remove i,str.length i 2 去掉字串的前i個字元 str str.remove 0,i or str str.substring ...

C 字串擷取

一 1 取字串的前i個字元 1 string str1 str.substring 0,i 2 string str1 str.remove i,str.length i 2 去掉字串的前i個字元 string str1 str.remove 0,i string str1 str.substrin...

C 字串擷取

c 幾個經常用到的字串擷取 一 1 取字串的前i個字元 1 string str1 str.substring 0,i 2 string str1 str.remove i,str.length i 2 去掉字串的前i個字元 string str1 str.remove 0,i string str...