天天看點

C++字元串C++ 字元串知識點C風格字元串C++string 類

目錄

  • C++ 字元串知識點
  • C風格字元串
  • C++string 類

C++ 字元串知識點

C++有兩種類型的字元串表現形式

  1. C風格字元串
  2. 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 類常用函數

  1. 字元串的長度 length() ;字元串中字元的數量size().
  2. 傳回或修改字元串中某個位置的字元 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
           
  1. c_str()函數傳回一個指向正規C字元串的指針
cout<<s1.c_str()<<endl;
           
  1. 比較兩個字元串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
           
  1. copy()函數拷貝自己的n個字元到str中。
string s1="ABCDEF";
char  a[10]={0};
s1.copy(a,4,0);//4代表拷貝個數,0為起始位置;
cout<<a<<endl;
//結果為ABCD;
           
  1. 如果字元串為空則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 .

繼續閱讀