字串知識

2020-10-03 14:00:50

字串知識

一.字串型別

1.「 」引號之間的字串 「abcdef」
2.char 陣列

char str[6] = {'H''e''\0'};//省略括號中的無語法問題,但陣列大小隻有3
char str[] = {'H''e'\0'};  //不規定陣列大小

(均以null’\0‘結尾) 字元陣列的大小要比所儲存的字元多1
3.封裝的字串類string

string st("acd");   //string st="acd";
cout << st << endl;

二.字串的輸入輸出

1.C語言中的scanf %c用於單個字元 ,%s用於字元陣列
char ch;
char s[50];
scanf("%c",&ch);
printf("%c\n",ch);
char st[50];
scanf("%s",st);    //以空格換行表示結束輸入    
printf("%s",st);
2.C語言 getchar() putchar() 輸入輸出單個字元
getchar();      //輸入任意字元
char c=getchar();    //輸入字元復值給c
3.C語言gets() puts()
char s[40];
gets(s);      // gets()輸入字元以換行結束
puts(s);      //  puts()括號輸出內容並換行
4.C++ 中getline()函數

分兩種:
第一種:在標頭檔案iostream 中,是iostream的成員函數
cin.getline(字元指標,字元個數N,結束符)

 char st[40];
 cin.getline(st,30,' ');
 cout<<st<<endl;
//輸入:aadadadawd  aaaa
//輸出:aadadadawd
函數原型
istream &getline( char *buffer, streamsize num, char delim );
 
istream &getline( char *buffer, streamsize num );

第二種:在標頭檔案string中
getline(輸入流,字元個數N,結束符)
函數原型

istream& getline (istream&  is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream&  is, string& str);
istream& getline (istream&& is, string& str);
//用法和上第一種類似,但是讀取的istream是作為引數is傳進函數的。
//讀取的字串儲存在string型別的str中。
//is    :表示一個輸入流,例如 cin。
//str   :string型別的參照,用來儲存輸入流中的流資訊。
//delim :char型別的變數,所設定的截斷字元;在不自定義設定的情況下,遇到’\n’,則終止輸入。
string st;
getline(cin,st);
string st;             //輸入:aaa ccc
getline(cin,st,' ');   //輸出:aaa

三.對字串處理的相關函數

1.字元陣列

C標頭檔案include<string.h>
C++標頭檔案cstring
strlen() 長度
strcpy() 複製
strcat() 拼接
strcmp() 比較
strstr()

char s[40],t[40];
cin>>s>>t;
cout<<strcmp(s,t)<<endl;       //如果s==t 返回0 s>t 返回1 s<t返回-1
char s[40]="acddef",t[40];
strcpy(t,s);
cout<<t<<endl;  //輸出:acddef
char s[40]="acddef",t[40]="def";
char  *index=strstr(s,t);
cout<<index<<endl;    //輸出:def
函數原型
size_t strlen(const char*);
char* strcmp(const char*, const char*);
char* strncmp(const char*, const char*, size_t);
char* strcat(char*, const char*);
char* strcpy(char*, const char*);
char* strncat(char*, const char*, size_t);
char* strncpy(char*, const char*, size_t);
/*呼叫函數strrchr和strchr時,第二個實參可以是字元。*/
/*雖然函數原型中第二個引數的型別是int,但字元在計算機中的儲存形式是其ASCII碼,因此可直接用int型別進行讀取。*/
char* strrchr(const char* s, int c); //查詢字串s中是否有字元c,若有則返回該字元最後一次出現的地址,若無則返回空指標
char* strchr(const char* s, int c); //查詢字串s中是否有字元c,若有則返回該字元首次出現的地址,若無則返回空指標
char* strstr(const char* s1, const char* s2);//查詢字串s1中是否有字串s2,若有則返回該字串首次出現的首地址,若無則返回空指標
char* strpbrk(const char* s1, const char* s2);//查詢字串s1中是否有字串s2中的部分內容,若有則返回該部分字串在s1中首次出現的首地址,若無則返回空指標
2.string

標頭檔案include string
string 對一些運運算元進行了過載
合併: +
比較:>= > == < <=

string s1="aaa",s2="ccc";
string s=s1+s2; 
cout<<s<<endl;   //輸出:aaaccc
string s1="abc",s2="abcd";
if(s1>s2)cout<<"1";      //字串比較大小
else cout<<"0";

常用簡單的類方法:
size() 當前字串大小
capacity() 容量
empty() 判斷字串是非為空
length() 當前字串長度

別人C++string模板類總結

四.字串演演算法

1.KMP 串匹配
2.manacher馬拉車
3.字串hash
4.字首陣列 字尾陣列