c++常用的string操作(一)

1定义和初始化string对象

//初始化string的方式
string s1;//默认初始化,s1是个空字符串
string s2(s1);//s2是s1的副本
string s2=s1;//等价于s2(s1),s2是s1的副本
string s3("value");//s3是字面值"value"的副本,除了字面值最后的那个空字符除外
string s3="value";//等价于s3("value")
string s4=(n,'c');//初始化为由连续的n个字符c组成的串

上面的初始化方式可以分为直接初始化和拷贝初始化,一般来说用到等号的就是拷贝初始化。
2string对象上的操作

os<<s;//将s写道输出流os当中,返回os
is>>s;//从is中读取字符串赋给s,字符串以空白分隔,返回is
getline(is,s);//从is中读取出一行赋给s,返回is
s.empty();//判断s是否为空
s.size();//返回s中字符的个数
s[n];//返回s中第n个字符的引用,位置n从0计起
s1+s2;返回s1+s2连接的结果
s1=s2;//把s2的值赋给s1
s1==s2;//判断s1和s2中所含的字符是否完全一样,string对象对字母的大小写面干
s1!=s2;//判断s1和s2中所含字符是否不同
<,<=,>,>= //利用字符在字典中的顺序进行比较,且对字母的大小写敏感

3读写string对象
可以用IO操作符来读写string对象

int main()
{
    string s;//空字符串
    cin>>s;//将string对象读入s,遇到空白就停止,如果你输入了"Hello world",那么只会输出"Hello"
    cout<<s<<endl;//输出s
    return 0;
}

遇到空白就自动停止,而且string对象会自动忽略开头的空白。
读取未知数量的string对象

int main()
{   
    string word;
    while(cin>>word)//如果流有效,说明没有遇到结束标记
        cout<<word<<endl;
    return 0;
}

用getline读取一整行

int main()
{
    string line;
    //每次从文件中读入一整行,知道末尾
    while(getline(cin,line))
        cout<<line<<endl;//用endl结束当前行并且刷新缓冲区
    return 0;
}
//注意:触发getline函数返回的那个换行符实际上被丢弃掉了,得到的string对象中并不包含该换行符

string的empty和size操作
通过改写刚刚的程序,做到只输出非空行

string line;
    //每次从文件中读入一整行,知道末尾
    while(getline(cin,line))
        if(!line.empty())
        cout<<line<<endl;//用endl结束当前行并且刷新缓冲区
    return 0;

可以利用size函数来输出超过某个长度的函数

string line;
    //每次从文件中读入一整行,知道末尾
    while(getline(cin,line))
        if(line.size()>80)
        cout<<line<<endl;//用endl结束当前行并且刷新缓冲区
    return 0;

string::sizetype类型
对于一个size函数来说,返回一个int或者如前面2.1.1节所述的那样返回一个unsigned似乎是合情合理的。但其实size函数返回的是一个string::size_type类型
下面就对这种新的类型稍作解释。
size函数返回的是一个无符号的整型值,因此切记在表达式中混用无符号和有符号数可能会产生意想不到的结果。例如,假设n是一个负值的int类型,那么比较s.size()和n大小的时候可能会产生意想不到的结果。

猜你喜欢

转载自blog.csdn.net/shine10076/article/details/82714958