string类

  1. string是表示字符串的字符串类
  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
  3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string;
  4. 不能操作多字节或者变长字符的序列。在使用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类相关推荐

  1. 为什么jdk中把String类设计成final

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 为什么j ...

  2. Java中的String类占用多大的内存

    写在前面 对于Java中的String类占用多大的内存空间这个问题,是最近面试中问的比较多的一个问题.很多小伙伴的回答的都不是很正确,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有 ...

  3. C++中的string类用法简介

    本文主要介绍C++中的string类的常见用法. 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理.可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行s ...

  4. c 语言string类用法,C++中的string类用法简介

    本文主要介绍C++中的string类的常见用法. 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理.可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行s ...

  5. 标准C++中的string类的用法总结

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

  6. java中String类是什么_Java中的String类

    /* String类用于描述字符串事物的 那么它就提供了多个方法对字符串进行操作 方法都会用,字符串这块就结束了 常见的操作有哪些? "abcd" 它应该具备什么功能,我们才能更好 ...

  7. string类有可以调换方向的函数吗_C++中的string类的用法小结

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

  8. 标准C++中的string类的用法总结(转)

    http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的 ...

  9. Java中的String类

    首先String对象的内容是不可变的,也就是说,String对象在创建出来以后,其中的内容就不可改变了. 1.int length():这个方法用来返回字符串的长度,` String str=&quo ...

  10. 关于Java中的String类

    我们知道String声明的字符串是不能被改变的.那么如果我们使用下面的语句: String str = "Hello" ; str = str + "World!&quo ...

最新文章

  1. (邓爱萍)类 对象 课本
  2. (转)在Eclipse中创建Maven多模块工程
  3. python爬取js动态网页_Python 从零开始爬虫(八)——动态爬取解决方案 之 selenium
  4. Rich feature hierarchies for accurate object detection and semantic segmentation(理解)
  5. 傅盛认知三部曲之三:战略就是格局+破局
  6. hdu2201 熊猫阿波的故事
  7. 北京航空航天大学计算机学院系主任,陈杰[北京航空航天大学教授] 简历
  8. 苹果手机怎么在照片上添加文字_怎么给手机照片添加文字?没想到方法这么容易,1分钟就能学会...
  9. [概念]像素,分辨率
  10. 强化学习——day31 多臂老虎机MAB的代码实现(Python)
  11. 创建数据库的相关命令与字符类型
  12. HCSC 2022cvpr 训练报错
  13. 量子计算机算法详解,量子计算机量子算法以及物理实现.pdf
  14. 【莹伙丛】我是如何设置 IDEA 以方便执行shell 脚本命令的?
  15. nginx基础(七)
  16. java导出Excel增加下拉框选项,解决小数据量和大数据量下拉框选项的问题
  17. 动漫图片生成实战(GAN,WGAN)
  18. 收集适合diy的电子制作资料
  19. C语言根据日期计算星期——基姆拉尔森计算公式
  20. java-sec-code学习

热门文章

  1. linux线程基础篇----线程同步与互斥
  2. 使用镜像源安装EASY_INSTALL和PIP教程
  3. 文献综述写作之“结构内容”
  4. 学习教材《构建之法》遇到的问题及思路
  5. java学习_File属性处理
  6. MySQL Show命令的使用
  7. python 怎么算l2范数_数学推导+纯Python实现机器学习算法13:Lasso回归
  8. mysql 6安装当前密码_MySQL8.0 安装踩坑指南
  9. 华为鸿蒙系统是否上线,华为官方:鸿蒙系统2.0上线,手机能否搭载鸿蒙操作系统?...
  10. html创建文件域的代码,word如何插入域代码