目錄
- C++ 字元串知識點
- C風格字元串
- C++string 類
C++ 字元串知識點
C++有兩種類型的字元串表現形式
- C風格字元串
- C++引入的string類
C風格字元串
C 風格的字元串起源于 C 語言,并在 C++ 中繼續得到支援。字元串實際上是使用 null 字元 \0 終止的一維字元數組。是以,一個以 null 結尾的字元串,包含了組成字元串的字元。
模闆
#include<iostream>
#include<cstring>//c風格類頭檔案
using namespace std;
int main()
{
char name[size];//定義變量 注:空字元需計入size
cin.getline(name,size);//整行輸入
/****/
return 0;
}
常用函數及目的
序号 | 函數及目的 |
---|---|
1 | strcpy(s1,s2); 複制字元串s2到s1 |
2 | stract(s1,s2) ;s1+s2 ; 連接配接字元串s2到s1的末尾 |
3 | strlen(s1); 傳回字元串s1的長度 |
4 | strcmp(s1,s2); 比較兩個字元串的字元大小,若s1=s2,傳回0;若s1>s2,傳回值大于0;若s1<s2傳回值小于0 |
5 | strchr(s1,ch); 傳回一個指針,指向字元串s1中字元ch第一次出現的位置 |
6 | strstr(s1,s2);傳回一個指針,指向字元串s1中字元串s2第一次出現的位置 |
操作
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char s1[20] = "Happy";
char s2[20] = "Birthday";
char s3[20];
char day;
//複制 s1到 s3;
strcpy(s3,s1);
cout<< s3<<endl;
//連接配接s1和s2;
strcat(s1,s2);
cout<<s1<<endl;
//傳回連接配接後s1字元串的長度
cout<<strlen(s1)<<endl;
//比較字元串s2和s3的字元大小
cout<<strcmp(s2,s3)<<endl;
return 0;
}
C++string 類
模闆
#include<iostream>
#include<string>//string類頭檔案
using namespace std;
int main()
{
string s1;//定義變量
cin>>s1;//getline(cin,s1);
/****/
return 0;
}
string 類常用函數
- 字元串的長度 length() ;字元串中字元的數量size().
- 傳回或修改字元串中某個位置的字元 at().
#include<iostream>
#include<iostream>
using namespace std;
int main()
{
string s1="Hello world"
cout<<s1.at(1)<<endl;
s1.at(1)='a';
cout<<s1<<endl;
return 0;
}
//結果為 e;Hallo world
- c_str()函數傳回一個指向正規C字元串的指針
cout<<s1.c_str()<<endl;
-
比較兩個字元串compare()
s1=s2 傳回值為0; s1>s2 傳回值大于0; s1<s2 傳回值小于0.
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1="ABCDEF";
string s2="ABCDFG.";
cout<<s1.compare(s2)<<endl; //比較s1,s2兩字元串
cout<<s1.compare(0,4,s2)<<endl;//s1前四個字元與字元串s2比較
cout<<s1.compare(0,4,s2,1,4)<<endl;//s1前四個字元與s2 1~4 字元比較
return 0;
}
//結果為-1,-3,0
- copy()函數拷貝自己的n個字元到str中。
string s1="ABCDEF";
char a[10]={0};
s1.copy(a,4,0);//4代表拷貝個數,0為起始位置;
cout<<a<<endl;
//結果為ABCD;
- 如果字元串為空則empty()傳回真(true),否則傳回假(false).
cout<<s1.empty()<<endl;
//若s1為空傳回為1;非空傳回為0;
7.insert()插入
string s1="Welcome to Nework";
s2="Lisa ";
s1.insert(0,"Lisa ");
s1.insert(0,"Lisa ");//在第0個字元前插入字元“Lisa”;
s1.insert(0,s2);//在s1字元串第0位前插入字元串s2;
s1.insert(0,s2,2,2);//在字元串的位置0插入字元串s2的子串(從位置2開始,長2個字元);
8.max_size()函數傳回字元串能儲存的最大字元數.
9.替換replace()
string s1="Nice to meet you.";
string s2="See you again";
char *ch="I love China";
s1.replace(1,2,"To");//把1~3的字元替換為"To"
s1.replace(1,2,s2,3,3);//把s1中1~3的字元替換為s2中3~6的字元 ;
//結果 NToe to meet you.
// N yoe to meet you.
10.resize()函數改變本字元串的大小到num, 新空間的内容不确定。也可以指定用ch填充。
s.resize(10) //将原字元串大小改變為10;
11.swap()函數把兩個字元串交換。
string first( "This comes first" );
string second( "And this is second" );
first.swap( second );
cout << first << endl;
cout << second << endl;
//顯示為 And this is second
// This comes first
12.substr()傳回本字元串的一個子串,從i開始,長n個字元。如果沒有指定,将是預設值 string::npos。這樣,substr()函數将簡單的傳回從i開始的剩餘的字元串。
string s("What we have here is a failure to communicate");
string sub = s.substr(21);
cout << "The original string is " << s << endl;
cout << "The substring is " << sub << endl;
//結果顯示為
//The original string is What we have here is a failure to communicate
// The substring is a failure to communicate
13.删除erase()
參數i 和 n 有預設值, 這意味着erase()可以這樣調用:隻帶有i以删除i後的所有字元,或者不帶有任何參數以删除所有字元.
string s("So, you like donuts, eh? Well, have all the donuts in the world!");
cout << "The original string is '" << s << "'" << endl;
s.erase( 50, 14 );//删除位置50之後14位的字元
cout << "Now the string is '" << s << "'" << endl;
s.erase( 24 );//删除位置24之後所有的字元
cout << "Now the string is '" << s << "'" << endl;
s.erase();//删除所有字元
cout << "Now the string is '" << s << "'" << endl;
//結果顯示為
// The original string is 'So, you like donuts, eh? Well, have all the donuts in the world!'
//Now the string is 'So, you like donuts, eh? Well, have all the donuts'
//Now the string is 'So, you like donuts, eh?'
//Now the string is ''
14.capacity()函數傳回在重新申請更多的空間前字元串可以容納的字元數. 這個數字至少與 size()一樣大.
15.get_allocator()函數傳回本字元串的配置器.
16.查找find()
傳回str在字元串中第一次出現的位置(從i開始查找,長度為n)。如果沒找到就傳回string::npos.
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1="Omega,you look so beautiful.";
string s2="look";
int n;
n=s1.find(s2,0);//從位置0開始查找;
n=s1.find(s2,0,15);//從位置0開始查找,長度為15
if(n!=string::npos)
cout<<"Found look is at " <<n<<endl;
else cout<<"Didn't find look"<<endl;
return 0;
}
(1)find_first_of 查找在字元串中第一個與str中的某個字元比對的字元,傳回它的位置。搜尋從index開始,(最多查找n個)如果沒找到就傳回string::npos ;
(2)find_first_not _of 在字元串中查找第一個與str中的字元都不比對的字元,傳回它的位置。搜尋從index開始(最多查找n個)。如果沒找到就傳回string::nops ;
(3)find_last_of 在字元串中查找最後一個與str中的某個字元比對的字元,傳回它的位置。搜尋從index開始,最多搜尋num個字元。如果沒找到就傳回string::nops ;
(4)find_last_not_of 在字元串中查找最後一個與str中的字元都不比對的字元,傳回它的位置。搜尋從index開始,最多查找num個字元如果沒找到就傳回string::nops .