string类
2019-11-22
18:08:06
构造字符串
#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;
}

程序说明:
- 重载的+=运算符将字符串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<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()不需要指定读取打多少个字符的数值参数。
赞 (0)
