string 详细学习

1.定义和初始化string对象

string s1 默认初始化,s1是一个空字符串
string s2(s1)

s2是s1的副本

string s2 = s1 等价于s2(s1),s2是s1的副本
string s3("value") s3是字面值"value"的副本,除了字面值最后的那个空字符
string s3 = "value" 与上面等价
string s4(n,'c') 把s4初始化为由连续n个字符c组成的串
#include<iostream>
using std::string;
using namespace std;

//1. 定义和初始化string对象

int main(void)
{
    //直接初始化和拷贝初始化
    string s5 = "hiya";//拷贝初始化
    string s6(s5);//直接初始化
    string s7(10, 'c');//直接初始化

    string s8 = string(10, 'c');//直接初始化
    string s9 = s8; //将s8拷贝给s9
}

2.string对象上的操作

os<<s 将s写到输出流os中,返回os
is>>s  从is中读取字符串赋给s,字符串以空格分隔,返回is
getline(is,s) 从is中读取一行赋给s,返回is
s.empty() s为空返回true,否则返回false
s.size() 返回s中字符的个数
s[n] 返回s中第n个字符的引用,位置n从0计起
s1+s2

返回s1和s2连接后的结果

s1 = s2 用s2的副本代替s1中原来的字符

s1 ==s2

s1 != s2 

如果s1和s2中所含的字符完全一样,则他们相等,string对象的相等性判断对字母的大小写敏感
<,<=,>,>= 利用字符在字典中的顺序进行比较

读写string对象

int main(void)
{
    //读写string
    string s;
    cin >> s;
    cout << s << endl;

    string s1, s2;
    cin >> s1 >> s2;
    cout << s1 << s2 << endl;
    return 0;
}

读取未知数量的string对象

int main(void)
{
    string word;
    while (cin >> word)
    {
        cout << word << endl;
    }
}

使用getline读取一整行(注意头文件)

#include<iostream>
#include<string>
using namespace std;

int main(void)
{
    string temp;
    while (getline(cin, temp))
    {
        cout << temp;
    }
    return 0;
}

字面值和string相加

#include<iostream>
#include<string>
using namespace std;

int main(void)
{
    string s = "hello";
    string s1 = s + ',' +"world";
    cout << s1 << endl;

    //string s2 = "," + "world" + s;//会发生错误,不能把字面值直接相加,+号左右必须至少有一个是string
    cout << s2;
    return 0;
}

 3.处理string对象中的字符

基于for语句遍历每个字符

for(declaration:expression)

  statement

#include<iostream>
#include<string>
using namespace std;

int main(void)
{
    string ch = "some string";

    for (auto k : ch)
        cout << k << endl;
    return 0;
}

 

改变string中的值

#include<iostream>
#include<string>
#include<cctype>
using namespace std;

int main(void)
{
    string ch = "some string";

    for (auto &k : ch)
        k = toupper(k);//k是一个引用,因此赋值语句将改变s中的值

    cout << ch << endl;
    return 0;
}

使用下标的方法访问

posted @ 2021-01-11 17:50  loliconsk  阅读(32)  评论(0)    收藏  举报