string 字符串在所有的语言中都非常重要,c++也不例外,接下来我们将介绍string中的常用方法

1. size() 和 length() 函数 : 他们返回字符串的真实长度,且不会因为空格而截断,这两个方法完全等价,使用及输出如下:

#include<iostream>
#include<string>
using namespace std; int main(void)
{
string s = "dasddasd";
printf("size()返回的长度为:%lu\nlength()返回的长度为:%lu",s.size(),s.length());
return ;
}

2. find()函数和rfind()函数 : 这两个函数用于查找字串在母串中的位置,并且返回该位置,当然如果找不到就会返回一个特别的标记string::nops,而find()函数是从字符串开始指针向后进行查找,rfind()函数是从字符串的结束指针开始向前查找,其使用及输出如下:

#include<iostream>
#include<string>
using namespace std; int main(void)
{
string s = "hello worldh";
int index = s.find("h"); // 从串首向后查找
int index2 = s.find("h",) // 固定位置后子串在母串的位置
int index1 = s.rfind("h"); // 从串尾向前查找
printf("(find()):字母h在母串中的位置为:%d\n", index);
printf("(rfind()):字母h在母串中的位置为:%d", index1);
return ;
}

值得注意的是我们可以通过组合使用这两个函数来实现判断该子串是否唯一存在于母串中,其实现代码如下:

#include<iostream>
#include<string>
using namespace std; inline bool whetherOnly(string &str,string &base){
return base.find(str) == base.rfind(str);
}

3. find_last_of()函数和find_first_of()函数:从函数名我们也可以知道find_last_of()函数是找这个子串在母串中最后一次出现的位置并且将该位置返回;而find_first_of()函数是找这个子串在母串中最后一次出现的位置并将该位置返回,其使用及输出如下:

#include <iostream>
#include <string>
using namespace std; int main(void)
{
string s = "hello worldh"; int index = s.find_first_of("h");
int index1 = s.find_last_of("h");
printf("(find_first_of()):字母h在母串中的位置为:%d\n", index);
printf("(find_last_of()):字母h在母串中的位置为:%d", index1);
}

4.assign()函数:该函数用于将目标串的值复制到该串上,并且只复制值,其使用及输出如下:

#include <iostream>
#include <string>
using namespace std; int main(void)
{
string s = "hello worldh";
s.clear();
s.assign("hello world");
cout<<s<<endl; }

5.clear()函数,把当前字符串清空,这时候如果调用string::size()函数或string::length()函数将返回0,其使用及输出如下:

#include <iostream>
#include <string>
using namespace std; int main(void)
{
string s = "hello worldh";
s.clear();
cout<<"clear后的串的长度"<<s.size()<<endl;
}

6.resize()函数,该函数可以将字符串变长到指定长度,若小于原本字符串的长度,则会截断原字符串;这个函数的一个重载形式是str.resize(length,'s') 可以用该输入字符's'来对字符串进行扩充至length的长度,该函数的使用及输出如下:

#include <iostream>
#include <string>
using namespace std; int main(void)
{
string s = "hello worldh";
s.resize(); // s会变为 hello
cout<<s<<endl;
s.resize(,'C'); // s 会变为 helloCCCCC
cout<<s<<endl; }

7. replace(pos,len,dist)函数: 该函数用于将该串从pos位置开始将长度为len的字串替换为dist串,值得注意的是该函数只替换一次,这与市面上的py和java等语言不一样,需要留意,该函数的使用和输出如下:

#include <iostream>
#include <string>
using namespace std; int main(void)
{
string s = "hello worldh";
s.replace(s.find("h"),,"#"); // 把从第一个h开始的两个字符变为一个字符 #
cout<<"替换后的字符串为: "<<s<<endl; }

那么既然C++本身不提供,替换所有子串的函数,我们就自己实现一个,其代码如下:

// 替换字符串里的所有指定字符
string replace(string &base, string src, string dst) //base为原字符串,src为被替换的子串,dst为新的子串
{
int pos = , srclen = src.size(), dstlen = dst.size();
while ((pos = base.find(src, pos)) != string::npos)
{
base.replace(pos, srclen, dst);
pos += dstlen;
}
return base;
}

8. erase(index,length)函数:该函数删除index位置后length长度的子串,其代码及输出如下:

#include <iostream>
#include <string>
using namespace std; int main(void)
{
string s = "hello worldh";
s.erase(s.find("h"),);
cout<<"擦除过后的串"<<s<<endl; // 将会输出lo worldh
}

9.substr(index,length)函数:该函数从index开始截断到长度为length并返回截断的子串;值得注意的是,该函数不改变母串的值,其使用及输出如下:

#include <iostream>
#include <string>
using namespace std; int main(void)
{
s = s.substr(,);
cout<<"截断并赋值后的字符串为:"<<s<<endl; // 会输出hello
}

10 . push_back(char c)函数,pop_back()函数,append(string s)函数:push_back(char c)函数往该字符串的尾端加入一个字符;pop_back()函数从该字符串的尾端弹出一个字符;而apend(string s)函数将会在该字符串的末尾添加一个字符串,并且返回添加后字符串的引用。他们的使用及输出如下图所示:

#include <iostream>
#include <string>
using namespace std; int main(void)
{
string s = "hello worldh";
// s.erase(s.find("h"),3);
s.pop_back(); //弹出串的最后一个元素
cout<<"弹出串尾元素后的字符串为: "<<s<<endl;
s.push_back('s'); // 在串的最后添加一个字符
cout<<"往串尾添加字符后的字符串为: "<<s<<endl;
s.append("hhh"); // 在串的最后添加一个字符串
cout<<"往串尾添加字符串后的字符串为: "<<s<<endl;
}

以上就是string中比较重要的函数的全部内容了,既然我们学完了该内容,那我们接下来做一条题来熟悉一下这些函数中的一些吧(题目与代码如下代码块,题目出自leetcode):

 // 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。
// 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 // 注意:每次拼写时,chars 中的每个字母都只能用一次。
// 返回词汇表 words 中你掌握的所有单词的 长度之和。 // 输入:words = ["cat","bt","hat","tree"], chars = "atach"
// 输出:6
// 解释:
// 可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。 // 输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr"
// 输出:10
// 解释:
// 可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。 #include <iostream>
#include <vector>
#include <string>
using namespace std;
class Solution
{
public:
int countCharacters(vector<string> &words, string chars)
{
int count = ;
bool flag = false; // 标记
string c_chars(chars); // 构造c_chars保存chars
for (int i = ; i < words.size(); i++) // 迭代单词表
{
if (c_chars.size() < words[i].size()) //如果单词的字母多于可选字母,则跳过这个单词
continue;
for (int j = ; j < words[i].size(); j++) // 迭代可选择的字母
{
int index = c_chars.find(words[i][j]);
if (index != c_chars.npos) // 能找到这个字母
{
flag = true;
c_chars.erase(index, ); // 从c_chars()删除这个字母
}
else
{
flag = false; // 不能找到,意味着不能组成这个单词
break; //跳出这次循环
}
}
if (flag) // 如果符合则计数加1
count += words[i].size();
c_chars.assign(chars); // 把chars的值在再次赋值给c_chars
}
return count;
}
};

最后感谢大家的阅读,string中这些的函数组合起来可以说是威力无穷,所以还是要好好掌握的。

以上就是这次随笔的全部内容了;其中有小部分内容参考了一些其他文章;好了,我们下次见,谢谢大家。

C++中 string 中的方法的使用详解的更多相关文章

  1. java中String是对象还是类?详解java中的String

    有很多人搞不懂对象和类的定义.比如说java中String到底是对象还是类呢? 有人说String 既可以说是类,也可以说是对象. 其实他这么说也没问题, 类和对象其实都是一个抽象的概念. 我们可以把 ...

  2. 【转帖】windows命令行中java和javac、javap使用详解(java编译命令)

    windows命令行中java和javac.javap使用详解(java编译命令) 更新时间:2014年03月23日 11:53:15   作者:    我要评论 http://www.jb51.ne ...

  3. SVN组成中trunk,branches and tags功能用法详解

    SVN组成中trunk,branches and tags功能用法详解  我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...

  4. 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...

  5. javascript中的Base64.UTF8编码与解码详解

    javascript中的Base64.UTF8编码与解码详解 本文给大家介绍的是javascript中的Base64.UTF8编码与解码的函数源码分享以及使用范例,十分实用,推荐给小伙伴们,希望大家能 ...

  6. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  7. Python中生成器和yield语句的用法详解

    Python中生成器和yield语句的用法详解 在开始课程之前,我要求学生们填写一份调查表,这个调查表反映了它们对Python中一些概念的理解情况.一些话题("if/else控制流" ...

  8. vue2.x版本中computed和watch的使用入门详解-computed篇

    前言 在基于vue框架的前端项目开发过程中,只要涉及到稍微复杂一点的业务,我们都会用到computed计算属性这个钩子函数,可以用于一些状态的结合处理和缓存的操作. 基础使用 在computed中,声 ...

  9. vue2.x版本中computed和watch的使用入门详解-关联和区别

    前面两篇介绍了computed和watch的基本使用 watch篇 computed篇 两者的区别,继续通过代码实现的方式具体去了解 html <li>最开始的value值:{{ name ...

  10. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

随机推荐

  1. 初入 Ubuntu 的一些操作 · Lei's blog

    查看系统版本 cat /etc/os-release 修改 root 密码 passwd 新建用户 新建用户: adduser username 将新用户加入 sudo 组,这样就可以用 sudo 命 ...

  2. mysql中tinyint、smallint、int和bigint类型的用法区别

    mysql中tinyint.smallint.int和bigint类型的用法区别: 在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127.无符号的范围是0到255(见官 ...

  3. kNN算法 Demo

    项目链接: https://github.com/WES6/kNN

  4. 我的python面试简历

    分享前一段我的python面试简历,自我介绍这些根据你自己的来写就行,这里着重分享下我的项目经验.公司职责情况(时间倒序),不一定对每个人适用,但是有适合你的点可以借鉴 我的真实经验:(14年毕业,化 ...

  5. 爬虫入门(四):urllib2

    主要使用python自带的urllib2进行爬虫实验. 写在前面的蠢事:本来新建了一个urllib2.py便于好认识这是urllib2的实验,结果始终编译不通过,错误错误.不能用Python的关键字( ...

  6. numpy学习总结

    Contents Numpy是一个用python实现的科学计算包,主要提供矩阵运算的功能,而矩阵运算在机器学习领域应用非常广泛,Numpy一般与Scrapy.matplotlib一起使用. Numpy ...

  7. Gnome Ubuntu16安装Nvidia显卡396驱动,CUDA9.2以及cudnn9.2

    深度学习环境配置,安装Nvidia显卡驱动,CUDA以及cudnn OS:ubuntu 16.04;driver: nvidia 396;CUDA: 9.2cudnn: 9.2 卸载原有Nvidia驱 ...

  8. Job for network.service failed because the control process exited with error code问题

    Job for network.service failed because the control process exited with error code问题 因为是克隆的,所以需要重新修改静 ...

  9. python爬虫之Appium手机APP爬虫

    一.Appium工作原理(详情见:https://www.cnblogs.com/sophia194910/p/7515165.html) Appium的功能其实很简单:监听一个端口,然后接收由cli ...

  10. tp5.1 请求时间格式化

    当前时间:{$Request.time|date='Y-m-d H:i:s'} 注意database.php的配置!记录一下!