C字符串與C++中string的差別詳解。本站提示廣大學習愛好者:(C字符串與C++中string的差別詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C字符串與C++中string的差別詳解正文
在C++中則把字符串封裝成了一種數據類型string,可以直接聲明變量並停止賦值等字符串操作。以下是C字符串和C++中string的差別:
C字符串
string對象(C++)
所需的頭文件稱號
<string>或<string.h>
<string>或<string.h>
須要頭文件 緣由
為了應用字符串函數
為了應用string類
聲明 方法
char name[20];
string name;
初始化方法
char name[20]="nihao";
string name = "nihao";
必需聲明字符串長度麼?
是
否
應用一個null字符麼?
是
否
字符串賦值 的完成方法
strcpy(name,"John");
name = "John";
長處
更快
更容易於應用,優選計劃
可以賦一個比現有字符更長的字符串麼?
不克不及
可以
C++經常使用字符串函數
char s1[]="I am a student";
char s2[20]="teacher";
char s3[]="student";
int result;
char s4[20],*p;
(1)串長度 int strlen(char *str)
cout<<strlen(s1)<<endl; 輸入14
cout<<strlen(s2)<<endl; 輸入7
(2)串拷貝 char *strcpy(char *str1,char *str2)
strcpy(s4,s2); //s4為"teacher"
(3)串聯接 char *strcat(char *str1,char*str2)
strcat(s2,s3); //s2為"teacherstudent"
(4)串比擬 int strcmp(char *str1,char *str) //比擬的是對應字符的ASCII碼值,假如str1>str2,前往1
result=strcmp(s2,s3); //result>0
result=strcmp(s2,s2); //result=0
result=strcmp(s3,s2); //result<0
(5)串定位 char *strchr(char *str,char ch)
p=strchr(s1,'s'); //找到前往字符在字串中的地位,不然前往-1
strcpy(p,s2); //s1為"I am a teacher"
(6)在一個串中查找能否存在和另外一個串相等的子串
(7)截取子串構成一個新串
字符串的輸出
(1)辦法一:應用輸出操符來填充一個C字符串變量
例如:
char a[80];
cin>>a;
注:以這類方法來讀取C字符串時,會疏忽最後的空白字符(空格、制表符和換行符),並且輸出會鄙人一個空格或許換行符處停滯。
(2)辦法二:應用預界說函數getline獲得整行輸出(包含空格)
getline函數有兩個參數:第一個參數用於吸收輸出的C字符串變量;第二個參數用於劃定getline最多能吸收的字符個數。
例如:
char a[80];
cin.getline(a,80);
當碰到行停止的時刻,輸出才會停滯。
C++ string類的輸出
(1)辦法一:和C字符串輸出的辦法一雷同。
(2)辦法二:應用getline函數。
例如:
string a;
getline(cin,a);
string對象和C字符串之間的轉換
可以將C字符串存儲在string類型的變量中,例如:
char a[] = "nihao";
string b;
b=a;
但string對象不克不及主動的轉換為C字符串,須要停止顯式的類型轉換,須要用到string類的成員函數c_str().
例如:
strcpy(a,b.c_str());
字符串到數字的轉換
atoi函數獲得一個C字符串參數,前往對應的int值。假如參數不與一個int值對應,atoi就會前往0。atoi函數在文件為cstdlib的庫中。假如數字太年夜,不克不及轉換成int類型的值,可使用atol將字符串轉換為long類型的值。
例如:
atoi("1234"); //前往整數1234
atoi("#123"); //前往0