亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

c字符串,string對象,字符串字面值的區別詳解

2020-01-26 15:53:47
字體:
來源:轉載
供稿:網友

一、字符串字面值
字符串字面值是一串常量字符,字符串字面值常量用雙引號括起來的零個或多個字符表示,為兼容C語言,C++中所有的字符串字面值都由編譯器自動在末尾添加一個空字符。
字符串沒有變量名字,自身表示自身

復制代碼 代碼如下:

"Hello World!" //simple string literal
"" //empty string literal
"/nCC/toptions/tfile.[cC]/n" //string literal using newlines and tabs

字符字面值: 'A' //single quote:character literal
字符串字面值: "A" //double quote:character string literal.包含字母A和空字符的字符串

字符串字面值的連接:

復制代碼 代碼如下:

std::out << "a multi-line "+
"string literal"+
" using concatenation"
<< std::endl;

輸出:a multi-line string literal using concatenation

多行字面值:

復制代碼 代碼如下:

std::out << "a multi-line /n
string literal/n
using a backslash"
<< std::endl;

輸出:a multi-line string literalusing a backslash

=================================================

1. string literal:字符串直接量:

復制代碼 代碼如下:

cout<<"hello"<<endl;

代碼中通過包含"hello"字符串自身來將其輸出,并未包含該字符串的變量。

2. 字符串直接量可以賦值給變量,但是與字符串直接量相關聯的內存空間位于只讀部分,因此它是常量字符數組。

復制代碼 代碼如下:

char* ptr = "hello";
ptr[1] = 'a';//crash! attemps to write to read-only memory.

因此,當引用字符串直接量的時候使用指向const的字符數組:
復制代碼 代碼如下:

const char* ptr = "hello";
ptr[1] = 'a';//bug! attempts to write to read-only memory.

3. 當將字符串直接量賦值給字符數組的初始值的時候。由于字符數組存放與棧中,不允許引用其他地方的內存,因此編譯器會將字符串直接量復制到站的數組內存中。因此,可以進行相應的修改。
復制代碼 代碼如下:

char stackArray[] = "hello";
stackArray[1] = 'a';

二、C++風格字符串
C++風格字符串:使用C++風格字符串的時候,要將它當做是一個普通的類型,如int,這樣反而會避免將string作為一個類來理解所帶來的很多問題。

1. 支持<cstring>中許多函數完成的同樣操作。
2. 字符串定義:

復制代碼 代碼如下:

string myString = “hello”;

3. 操作符 = :復制字符串;比如:
復制代碼 代碼如下:

string newone = original;

會將后者復制給前者,不會出現兩個變量同樣指向一個內存的情況。
4. 可以像int一樣使用 == 之類的操作符
5. 可以改變字符串中的某一個字符。 如
復制代碼 代碼如下:

string myString = "hello"; mystring[0] = 'l';

這中操作是允許的。

2.1 C風格字符串的使用
C++語言通過(const) char *類型的指針來操縱C風格字符串。

復制代碼 代碼如下:

#include <cstring> // cstring是string.h頭文件中的C++版本,而string.h是C語言提供的標準庫

//操縱C風格字符串的標準庫函數(參數類型省略,都是char *類型):
strlen(s) // 返回s的長度,不包括字符串結束符null
strcmp(s1, s2) //當s1<s2時,返回值<0 ,當s1=s2時,返回值=0 ,當s1>s2時,返回值>0
strcat(s1, s2) // 將字符串s2連接到s1后,并返回s1
strcpy(s1, s2) // 將s2復制給s1,并返回s1
strncat(s1, s2, n) // 將s2的前n個字符連接到s1后面,并返回s1
strncpy(s1, s2, n) // 將s2的前n個字符復制給s1,并返回s1
if(cp1 < cp2) // compares address, not the values pointed to
const char *cp1 = "A string example";
const char *cp2 = "A different string";
int i=strcmp(cp1, cp2); // i is positive
i=strcmp(cp2, cp1); // i is negative
i=strcmp(cp1, cp1); // i is zero


2.3 永遠不要忘記字符串結束符null
復制代碼 代碼如下:

char ca[]={'C', '+', '+'}; // not null-terminated
cout << strlen(ca) << endl; // disaster: ca isn't null-terminated

2.4 調用者必須確保目標字符串具有足夠的大小
復制代碼 代碼如下:

// Dangerous:What happens if we miscalculate the size of largeStr?
char largeStr[16+18+2]; // will hold cp1 a space and cp2
strcpy(largeStr, cp1); // copies cp1 into largeStr
strcat(largeStr, " "); // adds a space at end of largeStr
strcat(largeStr, cp2); // concatenates cp2 to largeStr
// prints A string example A different string
cout << largeStr << endl;

2.5 使用strn函數處理C風格字符串
復制代碼 代碼如下:

char largeStr[16+18+2] // to hold cp1 a space and cp2
strncpy(largeStr, cp1, 17); // size to copy includes the null
strncat(largeStr, " ", 2); // pedantic, but a good habit
strncat(largeStr, cp2, 19); // adds at most 18 characters, plus a null

2.6 盡可能使用標準庫類型string
復制代碼 代碼如下:

string largeStr = cp1; // initialize largeStr as a copy of cp1
largeStr += " "; // add space at end of largeStr
largeStr += cp2; // concatenate cp2 onto end of largeStr

此時,標準庫負責處理所有的內在管理問題。

三、C風格字符串
字符串字面值的類型實質是const char類型的數組。C++從C語言繼承下來的一種通用結構是C風格字符串,而字符串字面值就是該類型的實例。C風格字符串是以空字符null結束的字符數組:

復制代碼 代碼如下:

char ca1[]={'C', '+', '+'}; // no null, not C-style string
char ca2[]={'C', '+', '+', '/0'}; // explicit null
char ca3[]="C++"; // null terminator added automatically
const char *cp="C++"; // null terminator added automatically
char *cp1=ca1; // points to first element of a array, but not C-style string
char *cp2=ca2; // points to first element of a null-terminated char array

ca1和cp1都不是C風格字符串:ca1是一個不帶結束符null的字符數組,而指針cp1指向ca1,因此,它指向的并不是以null結束的數組。

字符串的連接:
1.c++中string可以替代c中的char數組且前者用起來更方便
。連接兩個string對象只需用'+';c字符串是用char數組實現的。以下都稱c字符串為char數組

例如:

復制代碼 代碼如下:

string s1="hello",s2="world";

          string s3=s1+s2;                  //也可以s3=s1+"world"

cout<<s3<<endl;//結果為helloworld


當然還可以用+=連接。

2.還可以這樣連接一個string對象和char數組。

例如:

復制代碼 代碼如下:

string s1="hello";

          char s2[]="world";

cout<<s1+s2<<endl;//輸出結果為helloworld


但不能這樣連接兩個char數組或字符字面值。

例如:

復制代碼 代碼如下:

string s1="hello";

           string s2="world";

           string s3=s1+"world";//正確,可以連接一個string對象和字符串字面值

           string s4="hello"+"world";//錯誤,不能這樣連接連個字符串字面值

           char s5[]="world";

           string s6=s1+s5;//正確,可以連接一個string對象和char數組

           char s7[]="hello";

           stirng s8=s7+s5;//錯誤,不能這樣連接兩個char數組。


總而言之只能用+或+=連接兩個string對象或一個string對象和字符串字面值或一個string對象和char數組。

連接一個string對象和字符串字面值或char數組或返回的都是string對象,所以可以連接一個string對象和字符串字面值(或char數組)后再連接一個字符串字面值(或char數組)。

例如:

復制代碼 代碼如下:

string s;//初始化為空
char s1[]="hello";
char s2[]="world";
s=s+s1+s2;//正確

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久频这里精品99香蕉| 欧美在线视频网| 欧洲精品在线视频| 91精品国产综合久久久久久久久| 欧美日韩亚洲视频一区| 91视频免费在线| 成人在线免费观看视视频| 欧美亚洲第一页| 久久影视免费观看| 国产一区二中文字幕在线看| 日本a级片电影一区二区| 亚洲精品suv精品一区二区| 亚洲欧美精品一区| 最近2019中文字幕大全第二页| 国产一区二区三区视频免费| 欧美最猛性xxxxx(亚洲精品)| 亚洲女成人图区| 亚洲aa在线观看| 亚洲视频在线视频| 欧美高清性猛交| 国产美女精品视频| 国产精品一区二区女厕厕| 亚洲欧美日韩成人| 亚洲天堂成人在线视频| 日韩电影在线观看永久视频免费网站| 最近免费中文字幕视频2019| 尤物tv国产一区| 亚洲国产精品久久| 欧美一级成年大片在线观看| 欧美日韩一区二区在线| 国产亚洲欧美aaaa| 亚洲精品自拍第一页| 97久久伊人激情网| 欧美中在线观看| 色狠狠久久aa北条麻妃| 91爱爱小视频k| 亚洲欧美国产精品| 国产日韩欧美中文在线播放| 精品视频在线播放免| 亚洲精品一区二三区不卡| 欧美日本高清一区| 精品在线欧美视频| 九九热精品视频在线播放| 91在线视频免费| 亚洲精品久久久一区二区三区| 久久久综合av| 黑人欧美xxxx| 国产精品99久久久久久人| 国产精品成人一区二区| 91人人爽人人爽人人精88v| 亚洲欧美一区二区三区在线| 国产一区二区三区三区在线观看| xvideos亚洲| 久久综合伊人77777蜜臀| 日韩av一卡二卡| 日韩av中文字幕在线免费观看| 欧美亚洲日本网站| 69av视频在线播放| 亚洲欧美国产高清va在线播| 成人免费网站在线观看| 国产精品一区二区三区久久| 欧美精品一本久久男人的天堂| 国产成人中文字幕| 91福利视频在线观看| 亚洲成人av片在线观看| 一本色道久久综合亚洲精品小说| 91国产视频在线| 日韩欧美国产成人| 欧美一级免费视频| 91高清视频在线免费观看| 国产精品自产拍高潮在线观看| 亚洲欧美在线一区| 国产一区二区欧美日韩| 亚洲成人黄色在线观看| 亚洲视频自拍偷拍| 国产精品久久久久久av福利软件| 精品久久久久久电影| 亚洲欧美三级伦理| 日韩国产高清视频在线| 一本大道久久加勒比香蕉| 亚洲精品国产欧美| 久久精品99无色码中文字幕| 黑人巨大精品欧美一区二区| 成人激情视频免费在线| 久久久久久免费精品| 中文字幕精品www乱入免费视频| 久99九色视频在线观看| 亚洲精品网址在线观看| 插插插亚洲综合网| 亚洲欧美中文字幕在线一区| 中文字幕欧美日韩va免费视频| 国产亚洲精品激情久久| 性欧美暴力猛交69hd| 日韩视频免费中文字幕| 日韩高清不卡av| 亚洲国产中文字幕久久网| 欧洲中文字幕国产精品| 国产精品27p| 91精品视频免费| 成人女保姆的销魂服务| 国产精品视频永久免费播放| 国产欧美精品va在线观看| 日本亚洲欧美成人| 91在线色戒在线| 九九热精品视频在线播放| 国产亚洲欧美另类中文| 日本亚洲欧美三级| 91麻豆桃色免费看| 欧美一性一乱一交一视频| 国产精品wwwwww| 欧美天堂在线观看| 日本精品一区二区三区在线播放视频| 日韩欧美中文免费| 97视频在线观看网址| 日韩激情视频在线播放| 欧美性生交大片免费| 中文字幕在线日韩| 国产精品免费一区二区三区都可以| 欧美电影免费观看电视剧大全| 久久精品电影网站| 亚洲人成啪啪网站| 亚洲有声小说3d| 亚洲精品永久免费精品| 久久久久国色av免费观看性色| 91亚洲精品久久久久久久久久久久| 亚洲v日韩v综合v精品v| 欧美日韩中文字幕在线视频| 国产欧美日韩高清| 亚洲国产美女精品久久久久∴| 美女视频黄免费的亚洲男人天堂| 亚洲精品成a人在线观看| 亚洲精品视频在线观看视频| 亚洲国产日韩欧美在线99| 色综合色综合网色综合| 国产精品高清免费在线观看| 日韩中文有码在线视频| 国产精品成人免费电影| 亚洲国产精品国自产拍av秋霞| 国产一区玩具在线观看| 国产999在线观看| 亚洲人午夜色婷婷| 亚洲日韩欧美视频一区| 欧美富婆性猛交| 国产精品一区二区女厕厕| 欧美成人免费va影院高清| 亚洲天堂av女优| 欧美精品videosex极品1| 亚洲乱亚洲乱妇无码| 中文字幕亚洲色图| 亚洲xxxx在线| 一本久久综合亚洲鲁鲁| 伊人伊成久久人综合网小说| 国产成人久久久精品一区| 亚洲人午夜精品| 91性高湖久久久久久久久_久久99| 久久99久久99精品免观看粉嫩| 九九热这里只有在线精品视| 亚洲自拍另类欧美丝袜| 欧美精品在线观看91| 91产国在线观看动作片喷水| 欧美电影免费观看| 91精品国产777在线观看| 奇米成人av国产一区二区三区| 亚洲精品美女久久久|