2019-11-22
18:08:06
构造字符串
#include#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; }
程序说明:
- 重载的+=运算符将字符串S1附加到string对象的后面。
- =运算符也可以被重载,以便将string对象,C-风格字符串或char赋值给string对象。
S=”asdfg”;
S1=S2
S=’?’;
- string six(alls + 6, alls + 10);
数组名相当于指针,所以alls+6和alls+10的类型都是char *。
若要用其初始化另一个string对象的一部分内容,则string s(s1+6,str+10);不管用。
原因在于,对象名不同与数组名不会被看作是对象的地址,因此s1不是指针。然而,
S1[6]是一个char值,所以&s1[6]是一个地址。
故可以写为:string seven(&five[6], &five[10]);
- 将一个string对象的部分内容复制到构造的对象中。
string eight(four, 7, 16);
string类输入
对于C-风格字符串:
char info[100];
- cin >> info;//read a wrd
- cin.getline(info,100);//read a line,discard \n
- cin.get(info,100);// read a line,leave \n in queue
#include#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()不需要指定读取打多少个字符的数值参数。