#include<iostream> #include<string> using namespace std; int main() { using namespace std; string one("My name is String!");//初始化,C-風格 cout << one << endl;//使用重載<<運算符顯示 string two(20, '$');//初始化爲由20個字符組成的字符串 cout << two << endl; string three(one);//複製構造函數將string對象three初始化爲one cout << three << endl; one += "I love wly.";//附加字符串 cout << one << endl; two = "Sorry!"; three[0] = 'p';//使用數組表示法訪問 string four; four = two + three; cout << four << endl; char alls[] = "All's well that ends well."; string five(alls, 20);//只使用前20個字符 cout << five << "!\n"; string six(alls + 6, alls + 10); cout << six << endl; string seven(&five[6], &five[10]); cout << seven << endl; string eight(four, 7, 16); cout << eight << endl; return 0; }
程序說明:ios
S=」asdfg」;數組
S1=S2函數
S=’?’;spa
數組名至關於指針,因此alls+6和alls+10的類型都是char *。指針
若要用其初始化另外一個string對象的一部份內容,則string s(s1+6,str+10);無論用。code
緣由在於,對象名不一樣與數組名不會被看做是對象的地址,所以s1不是指針。然而,對象
S1[6]是一個char值,因此&s1[6]是一個地址。blog
故能夠寫爲:string seven(&five[6], &five[10]);three
string eight(four, 7, 16);ci
對於C-風格字符串:
char info[100];
#include<iostream> #include<string> using namespace std; void Print(char s[]) { int i; for (i = 0; s[i] != '\0'; i++) cout << s[i]; cout << endl; cout << "字符串長: " << i << endl; } int main() { char info[100]; cin >> info; Print(info); cin.get(); cin.getline(info, 100); Print(info); cin.get(info, 100); Print(info); return 0; }
對於string對象:
string stuff;
cin >> stuff; //read a word
getline(cin,stuff); //read a line,discard \n
兩個版本的getline()都有一個可選參數,用於指定使用哪一個字符來肯定輸入邊界
cin.getline(info,100,‘:’);
getline(stuff,’:’);
區別:string版本的getline()將自動調整目標string對象的大小,使之恰好可以存儲輸入的字符:
char fname[10];
string fname;
cin >> fname;//could be a problem if input size > 9 characters
cin >> lname;//can read a very,very long word
cin.getline(fname,10);
cetline(cin,fname);
自動調整大小的功能讓string版本的getline()不須要指定讀取打多少個字符的數值參數。