• 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 << "!
    ";
        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];

    1. cin >> info;//read a wrd
    2. cin.getline(info,100);//read a line,discard
    3. cin.get(info,100);// read a line,leave in queue
    #include<iostream>
    #include<string>
    using namespace std;
    void Print(char s[])
    {
        int i;
        for (i = 0; s[i] != ''; 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

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

  • 相关阅读:
    Codeforces Round #497 (Div. 2) B. Turn the Rectangles
    Codeforces Round #497 (Div. 2) A. Romaji
    [DFS] [洛谷] P1219 八皇后 O(1)判断
    [归并] [STL] [洛谷] P1309 瑞士轮
    [贪心] [洛谷] P1803 凌乱的yyy / 线段覆盖
    [模拟] [洛谷] P1071 潜伏者
    java.io.EOFException: End of File Exception between local host is: "master/192.168.***.***"; destination host is: “master”:9000; :
    hadoop 无法打开网页和重新格式化问题
    hadoop平台环境搭建
    无法创建新虚拟机: 无法打开配置文件“F:BigDatavm12centos01centos01.vmx”: 拒绝访问。
  • 原文地址:https://www.cnblogs.com/wlyperfect/p/11913233.html
Copyright © 2020-2023  润新知