c++中的string类
string类
- string是表示字符串的字符串类
- 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
- string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string;
- 不能操作多字节或者变长字符的序列。在使用string类时,必须包含头文件以及using namespace std;
string类常见构造
函数名称 功能说明
string() 构造空的string类对象,即空字符串
string(const char* s) 用C-string来构造string类对象
string(size_t n, char c) string类对象中包含n个字符c
string(const string&s) 拷贝构造函数
string(const string&s, size_t n) 用s中的前n个字符构造新的string类对象
示例
#include<iostream>
#include<string>
using namespace std;void test01()
{string str;//默认构造string str2(str);//拷贝构造string str3 = str;string str4 = "abcd";string str5(10, 'a');cout << str4 << endl;cout << str5 << endl;
}int main()
{test01();system("pause");return 0;
}
string类对象的容量操作
函数名称 功能说明
size_t size() const 返回字符串有效字符长度
size_t length() const 返回字符串有效字符长度
size_t capacity ( ) const 返回空间总大小
bool empty ( ) const 检测字符串释放为空串,是返回true,否则返回false
void clear() 清空有效字符
void resize ( size_t n, char c ) 将有效字符的个数该成n个,多出的空间用字符c填充
void resize ( size_t n ) 将有效字符的个数改成n个,多出的空间用0填充
void reserve ( size_t res_arg=0 ) 为字符串预留空间
string类对象的访问操作
函数名称 功能说明
char& operator[] ( size_t pos ) 返回pos位置的字符,const string类对象调用
const char& operator[] ( size_t pos ) const 返回pos位置的字符,非const string类对象调 用
string类对象的修改操作
函数名称 功能说明
void push_back(char c) 在字符串后尾插字符c
string& append (const char* s); 在字符串后追加一个字符串
string& operator+=(const string& str) 在字符串后追加字符串str
string& operator+=(const char* s) 在字符串后追加C个数字符串
string& operator+=(char c) 在字符串后追加字符c
const char* c_str( )const 返回C格式字符串
size_t find (char c, size_t pos = 0)const 从字符串pos位置开始往后找字符c,返回该字符在 字符串中的位置
size_t rfind(char c, size_t pos = npos) 从字符串pos位置开始往前找字符c,返回该字符在 字符串中的位置
string substr(size_t pos = 0, size_t n = npos)const 在str中从pos位置开始,截取n个字符,然后将其 返回
string类非成员函数
函数 功能说明
operator+ 尽量少用,因为效率低
operator>> 输入运算符重载
operator<< 输出运算符重载
getline 获取一行字符串
relational operators 大小比较
#include<iostream>
#include<string>
using namespace std;
#include<stdexcept>void test01()
{string str;//默认构造string str2(str);//拷贝构造string str3 = str;string str4 = "abcd";string str5(10, 'a');cout << str4 << endl;cout << str5 << endl;//基本赋值str = "hello";str2 = str4;//string &assign(const char *s,int n)//把字符串s的前n个字符赋给当前的字符串str3.assign("abcdef", 4);cout << str3 << endl;//string &assign(const string *s,int start,int n)//将s从start开始n个字符赋值给字符串string str6;str6.assign(str, 1, 3);//ell ? hel 从0索引cout << str6 << endl;}void test02()
{string s = "hello world";for (int i = 0; i < s.size(); i++){//cout << s[i] << endl;cout << s.at(i) << endl;}//[]和at区别?[]访问越界,直接挂掉 at会抛出异常try{//cout << s[100] << endl;cout << s.at(100) << endl;}catch (out_of_range& e){cout << e.what() << endl;}catch (...){cout << "越界异常" << endl;}
}void test03()
{//拼接string s1 = "我";string s2 = "爱北京";s1+=s2;cout << s1<< endl;s1.append("天安门");cout << s1 << endl;//find查找string s = "abcdefg";int pos = s.find("bcf");//找不到返回-1cout << "pos=" << pos << endl;int pos2 = s.rfind("bc");//rfind和find结果一样,内部查找方式不一样cout << "pos2=" << pos2 << endl;//替换string s3 = "hello";s3.replace(1, 3, "1111");//替换从pos开始n个字符为字符串strcout << s3 << endl; //he1111o
}void test04()
{string s1 = "bbc";string s2 = "abc";if (s1.compare(s2) == 0){cout << "s1等于s2" << endl;}else if (s1.compare(s2)==1){cout << "s1大于s2" << endl;}else{cout << "s1小于s2" << endl;}
}void test05()
{string s1 = "abcde";string s2 = s1.substr(1, 3);cout <<"s2="<< s2 << endl;//需求,查找一个邮件的用户名string email = "zhangtao@sina.com";int pos=email.find("@");//cout << "pos" << pos << endl;string userName = email.substr(0, pos);cout << "用户名" << userName << endl;}void test06()
{string s1 = "hello";s1.insert(1, "111");cout << s1 << endl;//h111ello//删除111s1.erase(1, 3);cout << s1 << endl;
}/*
string和c-style字符串转换
*/void func(string s)
{cout << s << endl;
}void func2(char *s)
{cout << s << endl;
}
void test07()
{string s = "abc";//string->char *const char *p = s.c_str();func(p);//const char *隐式类型转换为string//const char *->string string s2(p);//func2(s2);//string 不能隐式类型转换成char *}
void test08()
{string s = "abcdefg";char &a = s[2];char &b = s[3];a = '1';b = '2';cout << s << endl;cout << (int *)s.c_str() << endl;s = "pppppppppppppppp";/*a='1';b = '2';*/cout << s << endl;cout << (int *)s.c_str() << endl;
}/*
写一个函数,函数内部string字符串中的所有小写字母都变成大写字母*/
void test09()
{string s = "abCdEfg";for (int i = 0; i < s.size(); i++){//s[i] = toupper(s[i]); //全变小写s[i] = tolower(s[i]);}cout << s << endl;}int main()
{//test01();//test02();//test03();///test04();//test05();///test06();//test07();//test08();test09();system("pause");return 0;
}
c++中的string类相关推荐
- 为什么jdk中把String类设计成final
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 为什么j ...
- Java中的String类占用多大的内存
写在前面 对于Java中的String类占用多大的内存空间这个问题,是最近面试中问的比较多的一个问题.很多小伙伴的回答的都不是很正确,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有 ...
- C++中的string类用法简介
本文主要介绍C++中的string类的常见用法. 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理.可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行s ...
- c 语言string类用法,C++中的string类用法简介
本文主要介绍C++中的string类的常见用法. 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理.可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行s ...
- 标准C++中的string类的用法总结
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...
- java中String类是什么_Java中的String类
/* String类用于描述字符串事物的 那么它就提供了多个方法对字符串进行操作 方法都会用,字符串这块就结束了 常见的操作有哪些? "abcd" 它应该具备什么功能,我们才能更好 ...
- string类有可以调换方向的函数吗_C++中的string类的用法小结
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...
- 标准C++中的string类的用法总结(转)
http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的 ...
- Java中的String类
首先String对象的内容是不可变的,也就是说,String对象在创建出来以后,其中的内容就不可改变了. 1.int length():这个方法用来返回字符串的长度,` String str=&quo ...
- 关于Java中的String类
我们知道String声明的字符串是不能被改变的.那么如果我们使用下面的语句: String str = "Hello" ; str = str + "World!&quo ...
最新文章
- (邓爱萍)类 对象 课本
- (转)在Eclipse中创建Maven多模块工程
- python爬取js动态网页_Python 从零开始爬虫(八)——动态爬取解决方案 之 selenium
- Rich feature hierarchies for accurate object detection and semantic segmentation(理解)
- 傅盛认知三部曲之三:战略就是格局+破局
- hdu2201 熊猫阿波的故事
- 北京航空航天大学计算机学院系主任,陈杰[北京航空航天大学教授] 简历
- 苹果手机怎么在照片上添加文字_怎么给手机照片添加文字?没想到方法这么容易,1分钟就能学会...
- [概念]像素,分辨率
- 强化学习——day31 多臂老虎机MAB的代码实现(Python)
- 创建数据库的相关命令与字符类型
- HCSC 2022cvpr 训练报错
- 量子计算机算法详解,量子计算机量子算法以及物理实现.pdf
- 【莹伙丛】我是如何设置 IDEA 以方便执行shell 脚本命令的?
- nginx基础(七)
- java导出Excel增加下拉框选项,解决小数据量和大数据量下拉框选项的问题
- 动漫图片生成实战(GAN,WGAN)
- 收集适合diy的电子制作资料
- C语言根据日期计算星期——基姆拉尔森计算公式
- java-sec-code学习
热门文章
- linux线程基础篇----线程同步与互斥
- 使用镜像源安装EASY_INSTALL和PIP教程
- 文献综述写作之“结构内容”
- 学习教材《构建之法》遇到的问题及思路
- java学习_File属性处理
- MySQL Show命令的使用
- python 怎么算l2范数_数学推导+纯Python实现机器学习算法13:Lasso回归
- mysql 6安装当前密码_MySQL8.0 安装踩坑指南
- 华为鸿蒙系统是否上线,华为官方:鸿蒙系统2.0上线,手机能否搭载鸿蒙操作系统?...
- html创建文件域的代码,word如何插入域代码