字串知識
一.字串型別
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.前綴陣列 后綴陣列
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/152012.html
標籤:其他
