欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

string类

程序员文章站 2022-07-10 21:38:59
2019-11-22 18:08:06 构造字符串 #include #include using namespace std; int main() { using namespace std; string one("My name is 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;
}

string类

 

程序说明:

  •  重载的+=运算符将字符串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];

  1. cin >> info;//read a wrd
  2. cin.getline(info,100);//read a line,discard \n
  3. 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对象:

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()不需要指定读取打多少个字符的数值参数。