C++存储和处理字符串
1.用字符數組
字符串常量
定義
字符串常量是用一對雙引號括起來的字符序列,例如“This is a string”,"Hello,world"都是字符串常量。由于雙引號是字符串的限界符,所以字符串中間的雙引號就需要用轉義字符來表示。例如"Please enter \"Yes \ " or \"No\""就表示Please enter"Yes" or "No"
存放
字符串常量在內存中的存放形式是,按串中字符的排列次序順序存放,每個字符占一個字節,并在末尾添加'\0'作為結尾標記。這實際上是一個隱含創建的類型為char的數組,一個字符串常量就表示這樣一個數組的首地址。因此,可以把字符串常量賦值給字符串指針,由于常量是不能改的,應將字符串常量賦給指向常量的指針,此時可以直接輸出。
const char* STRING1="This is a string."; cout<<STRING1;字符串變量
字符串變量也可以用類似的方式來表示。如果創建一個char數組,每個元素存放字符串的一個字符,在末尾放置一個'\0',便構成了C++字符串。它的存儲方式和字符串常量一致,也是順序存放,每個字符占一個字節。但是,用于存放字符串的數組的元素個數不能小于字符串的長度,即字符串數組的長度最小等于字符個數+1
初始化
字符數組初始化,可以是以逗號隔開的ASCII碼(這時候需要有’\0’)或者字符常量,也可以是整體的字符串常量(這時候末尾的’\0’是隱含的)。下面列出的語句都可以創建一個初值為"Hello,World"的字符串常量,3種寫法是等價的。
三者的打印
const char* s1=str;const char* s2=str1;const char* s3=str2;cout<<s1<<endl;cout<<s2<<endl;cout<<s3<<endl;內存中Hello,World數組存儲如下
| 內容 | H | e | l | l | o | , | W | o | r | l | d | \0 |
C語言字符串處理函數
補充string.h頭文件下常用的字符串處理函數
| char *strcat( char *str1, const char *str2 ); | 函數將字符串str2 連接到str1的末端,并返回指針str1 |
| char *strchr( const char *str, int ch ); | 函數返回一個指向str 中ch 首次出現的位置,當沒有在str 中找ch到返回NULL。 |
| int strcmp( const char *str1, const char *str2 ); | 比較字符串str1 and str2返回值如下less than 0 :str1 is less than str2 ; equal to 0 :str1 is equal to str2 ;greater than 0 :str1 is greater than str2 |
| char *strcpy( char *to, const char *from ); | 復制字符串from 中的字符到字符串to,包括空值結束符。返回值為指針to。 |
2. string類
成員函數
常用成員函數功能簡介
| string append (const char* s); | 將字符串s添加到本串尾 |
| string assign (const char *s); | 賦值,將s所指向的字符串賦值給本對象 |
| int compare(const string & str) const; | 比較本串與str中串的大小,當本串<str串時,返回負數;當本串>str串時,返回正數;兩串相等時,返回0 |
| string & insert(unsigned int p0,const char* s); | 將s所指向的字符串插入在本串中位置p0之前 |
| string substr(unsigned int pos,unsigned int n) const; | 取子串,取本串中位置pos開始的n個字符,構成新的string類對象作為返回值 |
| unsigned int find(const basic_string &str) const; | 查找并返回str在本串中第一次出現的位置 |
| unsigned int length() const; | 返回串的長度(字符個數) |
| void swap(string & str); | 將本串與str串中的字符串進行交換 |
下面是string類的一段測試代碼
#include<iostream> #include<string> using namespace std;//根據value的值輸出true或false,title為提示文字 inline void test( const char* title,bool value){cout<<title<<"returns: "<<(value ?"true" :"false")<<endl; }int main(){string s1="DEF";cout<<"s1 is "<<s1<<endl;string s2;cout<<"Please enter s2:";cin>>s2;cout<<"Length of s2: "<<s2.length()<<endl;//比較運算符的測試test("s1<=\"ABC\"",s1<="ABC");test("\"DEF\"<=s1","DEF"<=s1);//連接運算符的測試s2+=s1;cout<<"s2=s2+s1:"<<s2<<endl;cout<<"length of s2:"<<s2.length()<<endl;}測試結果如下
s1 is DEF
Please enter s2:azheng
Length of s2: 6
s1<="ABC"returns: false
“DEF”<=s1returns: true
s2=s2+s1:azhengDEF
length of s2:9
總結
以上是生活随笔為你收集整理的C++存储和处理字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 来德利瓷砖75&#10006;&
- 下一篇: 全好全拆床垫承托力怎么样?