c++里的string类
来源:互联网 发布:表单大师软件 编辑:程序博客网 时间:2024/06/09 21:59
本博客依据《c++ Primer Plus (第6版)中文版 》而写。
c++里的string类是对字符串的处理,比c语言的字符串处理好用得多。
string对字符串的处理是对字符串进行类似常量化处理。也就是说,我们可以将一个字符串当成一个常数/常量来进行处理。
首先,使用string必须包含头文件 #include <string> 还要使用命名空间 using namespace std;
基本操作:
1.构造string(构造字符串)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
构造函数 | 描述
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const char *s) | 将string对象初始化为s指向的NBTS
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(size_type n , char c) | 创建一个包含n个元素的string对象,其中每个对象都被初始化为字符c
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const string & str) | 将一个string对象初始化为string对象str(复制构造函数)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string() | 创建一个默认的string对象,长度为0(默认构造函数)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const char *s , size_type n) | 将string对象初始化为s指向的NBTS的前n个字符,即使超过了NBTS结尾
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
template<class Iter> | 将string对象初始化为区间[ begin , end)内的字符,其中begin和end的行为就像指针
string(Iter begin , Iter end) | ,用于指定特定位置,范围包括begin在内,但不包括end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const string &str , string size_type pos = 0,size_type n = npos) | 将一个string对象初始化为对象str中从位置pos开始到结尾
| 的字符,或从位置pos开始的n个字符
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string (string && str) noexcept | 这是c++11新增的,它将一个string对象初始化为string对象str,并可能修改str(移动
| 构造函数)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(initializer_list<char> il | 这是c++11新增的,它将一个string对象初始化列表il中的字符
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <iostream>#include <string>using namespace std;int main(){ string one("Lottery Winner!"); cout << one << endl; //构建一个叫 one 的字符串,并将它初始化为"Lottery Winner!" string two(30,'$'); cout << two << endl; //构建一个叫 two 的字符串,并将它初始化为由30个$字符组成的字符串 string three(one); cout << three << endl; //复制构造函数将string对象three初始化为string 对象 one one += " Oops!"; cout << one << endl; //在字符串 one 后面加上"Oops!"(本质是重载了“+=”) two = "Sorry! That was "; three[0] = 'p'; string four; four = two + three; cout << four << endl; //将"Sorry! That was "赋给字符串two,将three的第一个字符改为'p',将two 和three的内容加起来赋给字符串four char alls[] = "All's well that ends well"; string five(alls,20); cout << five << "!\n"; //将alls的前20个字符赋给five string six(alls + 6,alls + 10); cout << six << ", "; //将alls的从第6个字符开始到第10个字符的内容赋给six string seven(&five[6],&five[10]); cout << seven << "...\n"; //将alls的从第6个字符开始到第10个字符的内容赋给seven string eight(four,7,16); cout << eight << " in motion!" << endl; //将four的从第7个字符开始到第16个字符的内容赋给eight return 0;}
2.字符串的输入:
(1.) 对于C语言版的输入:
char s1[100];
输入方式有3种
a. cin>>s1; 只能读一个word。也就是说遇到空格或者 ‘ \n ’ 就停止了
b. cin.getline(s1,100); 遇到 ' \n ' 停止,可以输入空格,但不包含 ' \n '
c. cin.get(s1,100); 遇到 ' \n ' 停止,但是最后包含 ' \n '
(2.) 对于string的输入:
string s2;
输入方式有2种:
a. cin>>s2; 只能读一个word
b. getline(cin,s2); 遇到 ' \n ' 停止
对于2个版本的getline()输入,都有一种可输入可选参数的方式,用于指定使用那个字符来确定输入的边界:
cin.getline(s1,100,'#'); 表示遇到#号就停止
getline(s2,'#'); 同上
2个版本在功能上的主要区别的,string版本的getline()将自动调整目标string对象的大小,使之刚好能够存储输入的字符,简而言之,就是 string字符串的长度是依据你输入的字符串的长度而定的,你输入多长的字符串它就是多长的长度。而C语言版的是有固定长度的,比如这个例子 的长度是100。 但是string类的输入长度不是无限制的,输入的最大限制是 unsigned int的最大值
string也可以直接比较大小:
s1 == s2; s1 > s2; s1 < s2;
对于string类,下面来个例题:
字符串的冒泡排序 (20分)
我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。
输入格式:
输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。
输出格式:
输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。
输入样例:
6 2bestcateastafreeday
输出样例:
bestacatdayeastfree
pat上面的题:如果用string类做,非常简单。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <vector>#include <list>#include <algorithm>using namespace std;int main(int argc, char *argv[]) {string s[101];int n,k;scanf("%d%d",&n,&k);for(int i = 1; i <= n; ++i){cin>>s[i];}for(int i = 1; i <= n; ++i){if(k == 0) break;k--;for(int j = 1; j <= n-i; ++j){string tmp;if(s[j] > s[j+1]){tmp = s[j];s[j] = s[j+1];s[j+1] = tmp;}}}for(int i = 1; i <= n; ++i){cout<<s[i]<<endl;}return 0;}
- c++里的string类
- C/C++里string与int的相互转换算法
- Java里的字符串、String类
- String类里的compareTo()方法~
- VC里的String
- Python里的String
- string 里的 find
- (第四章)C风格字符串和string类里的字符串的区别 动态创建数组
- System.String.Format里"{0:C}"是什么意思。
- C++里string的用法
- java里的String Pool
- java 里特殊的String
- C++里的string类初窥
- [C++]String类的实现
- C++string类的方法
- [C++]String类的实现
- [C++]String类的实现
- C++String类的实现
- 游戏开发-网址收藏
- 进入应用动画闪屏, android5.0初始动画,不执行解决等方案总结
- 各种基本算法实现小结(三)—— 树与二叉树
- Microsoft 2016 面试题1 | 最大二叉搜索子树
- 数据库读写分离
- c++里的string类
- 解决QT使用mysql编译时不能连接数据库的问题
- GDAL实现读写ESRI ArcGIS的shapfile文件
- 使用cropbox实现图片剪切上传
- poj3311(状态压缩dp)
- js父窗口和子窗口之间传值
- MySQL的limit是针对结果集进行分页。
- iOS关于NSCharacterSet 的用法
- redis3.0 cluster功能介绍