C++ string类用法总结 ——墨白

自从大家开始学习C++,相信不少朋友都注意到了C++的这个新特性(相较于C)。有人说要想学习C++就要先忘掉C,博主本人并不完全赞成这种说法,但学习C++的过程中确实要改变一些以前学C的习惯,string类(型)无疑是C++的大亮点之一,有了string类(型),我们再也不用用C中string.h中的那堆以str开头的函数了(C++里头文件是cstring).下面就string类(型)做几点说明。
1.要用string类,请先包含头文件,注意了与string.h区别开。
2.string类型的实质:其实并没有string这种基本类型,正确应该读作string类,是的,string其实是类名,所以我们以string声明变量的过程实际上是string类的对象实例化的过程,后续我们在讲C++的封装时会反复遇到对象实例化这个专有名词。这也就解释了为什么我们用string声明的变量加上一个点就可以调用很多函数。C++的结构体和类里面都可以声明/定义函数,这又是C++相较于C的一个较大的变动。

好的,废话不多说,我们赶快进入string类用法的学习中吧!
注:请同学们粘贴下文代码到自己的IDE中查看结果,自己动手,记忆更深刻。
**

一:字符串的声明及初始化

**

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1="I am string1!";//可以这样赋值
    string str2("I am string2!");//还可以这样赋值
    string str3("ABCDEFGH",3);//取前三个字母给str3初始化
    string str4(str3);//也可以这样初始化,实际是在调用拷贝构造函数
    string str5(3,'A');//用三个A作为str5的值,注意与ste3区分
    string str6("AB1245329",1,5);//从a[1]开始(包括a[1]向后取5个字符
    //用来初始化,a指的是用来赋值的字符数组;
    cout<<str1<<endl;
    cout<<str2<<endl;
    cout<<str3<<endl;
    cout<<str4<<endl;
    cout<<str5<<endl;
    cout<<str6<<endl;
    return 0;

}

二:string的相关成员函数

1.assigh()赋值函数

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str("wozhendehaoshuai!");//以此为例,我们来看函数的用法
    str.assign("I looks better!");
    cout<<str<<endl;//相当于str="I looks better!";
    //这个例子除了告诉我们重新赋值的函数之外,还告诉我们字符串里
    //可以有空格,但cin又读不了空格,所以我们用getline(cin,str)来读
    
    return 0;
}

2.swap()函数(交换两个字符串的内容)

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1("I am string1!");
    string str2("I am string2!");
    cout<<str1<<endl<<str2<<endl;
    str1.swap(str2);//交换str1与str2的值
    cout<<str1<<endl<<str2<<endl;
    return 0;
}

3.直接用“+=”给字符串尾部添加字符串

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1("I am still handsome!");
    string str2(" and you are handsome,too");
    cout<<str1<<endl<<str2<<endl;
    str1+=str2;//把str2的内容添加到str1尾部
    cout<<str1<<endl<<str2<<endl;
    return 0;
}

4.用insert()成员函数给字符串插入字符

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1("weishenmewozhemeshuai?");
    string str2="hhhhh";
    str1.insert(3,str2);//在前三个元素后面插入str2
    cout<<str1<<endl;//输出 weihhhhhshenmewozhemeshuai?
    return 0;
}

insert()函数的用法还没完呢!

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1("weishenmewozhemeshuai?");
    string str2="012345";
    str1.insert(3,str2,2,4);//在前三个元素后面插入
    //并且只插入从str2[2]开始往后四个字符
    cout<<str1<<endl;//输出 wei2345shenmewozhemeshuai
    return 0;
}

5.有了erase(),字符串的部分删除变得好简单!!!

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1("weishenmewozhemeshuai?");
    str1.erase(3,5);//前面三个不删,从第四个开始一共删除5个
    //所以删除的是shenm
    cout<<str1<<endl;//输出weiewozhemeshuai?
    return 0;
}

6.replace()我们用的最多,可以让你随心所欲的操作字符串!

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1("weishenmewozhemeshuai?");
    str1.replace(3,5,"hh");//用法可以类比前面
    //前面三个元素不变,从第四个元素开始str1[3]连续选中5个字符,
    //把这5个字符用后面的字符串替换。
    cout<<str1<<endl;
    return 0;
}

7.然后比较有用的是find()函数,能帮你返回你想要查找的字符串的第一个下标,查不到返回4294967295。

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1("weishenmewozhemeshuai?");
    cout<<str1.find("en")<<endl;//输出5
    cout<<str1.find("e")<<endl;//输出1
    cout<<str1.find("ewo")<<endl;//输出8
    return 0;
}

8.string类可以直接用><号比大小,为一个逻辑表达式,谁的开始元素的ASCII码大,谁就大,也就是所谓的字典序。这里不做过多赘述。我们来学习判断字符串是否为空的函数empty()

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1("weishenmewozhemeshuai?");
    cout<<str1.empty()<<endl;//输出0
    str1="";
    cout<<str1.empty()<<endl;//输出1
    return 0;
}

9.然后是获取字符串长度(字符个数)(不算\0)的size()函数

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1("I am so handsome!");
    cout<<str1.length()<<endl;//17
    cout<<str1.size()<<endl;//17
    //哈哈,很吃惊吧,两个都是不算\0的有效长度
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Architect_chaser/article/details/88086593