C++中 string 中的方法的使用详解
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 中的方法的使用详解的更多相关文章
- java中String是对象还是类?详解java中的String
有很多人搞不懂对象和类的定义.比如说java中String到底是对象还是类呢? 有人说String 既可以说是类,也可以说是对象. 其实他这么说也没问题, 类和对象其实都是一个抽象的概念. 我们可以把 ...
- 【转帖】windows命令行中java和javac、javap使用详解(java编译命令)
windows命令行中java和javac.javap使用详解(java编译命令) 更新时间:2014年03月23日 11:53:15 作者: 我要评论 http://www.jb51.ne ...
- SVN组成中trunk,branches and tags功能用法详解
SVN组成中trunk,branches and tags功能用法详解 我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...
- 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...
- javascript中的Base64.UTF8编码与解码详解
javascript中的Base64.UTF8编码与解码详解 本文给大家介绍的是javascript中的Base64.UTF8编码与解码的函数源码分享以及使用范例,十分实用,推荐给小伙伴们,希望大家能 ...
- JAVA中的四种JSON解析方式详解
JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...
- Python中生成器和yield语句的用法详解
Python中生成器和yield语句的用法详解 在开始课程之前,我要求学生们填写一份调查表,这个调查表反映了它们对Python中一些概念的理解情况.一些话题("if/else控制流" ...
- vue2.x版本中computed和watch的使用入门详解-computed篇
前言 在基于vue框架的前端项目开发过程中,只要涉及到稍微复杂一点的业务,我们都会用到computed计算属性这个钩子函数,可以用于一些状态的结合处理和缓存的操作. 基础使用 在computed中,声 ...
- vue2.x版本中computed和watch的使用入门详解-关联和区别
前面两篇介绍了computed和watch的基本使用 watch篇 computed篇 两者的区别,继续通过代码实现的方式具体去了解 html <li>最开始的value值:{{ name ...
- CSS中伪类及伪元素用法详解
CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...
随机推荐
- 吴裕雄--天生自然 R语言开发学习:回归(续三)
#------------------------------------------------------------# # R in Action (2nd ed): Chapter 8 # # ...
- 吴裕雄--天生自然KITTEN编程:角色交换
- Python字符串编码——Unicode
ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是 ...
- Android studio常用快捷键与设置
1.格式化代码: 命令 快捷键 将代码合并成一行 Ctrl + Shift + J 格式化 Ctrl+Alt+L 2.API函数参数提示:双击选中所要提示的函数,再按F2即可显示函数的使用方法. 3. ...
- Mongdb创建 连接过程
在bin目录下启动后 Show dbs 显示库,库里有内容才会显示库名称 Use admin 切换库 没有的默认创建 show users显示用户信息 Show collections显示表名 db. ...
- 杂记:OSX下编译安装最新版RedisDesktopMmanager
之前使用Redis数据库时因为操作简单,一直使用的是“redis-cli”连接Redis:后来因为数据展示的不是很直观,所以开始使用带有图形界面的Redis客户端:RedisDesktopMmanag ...
- swap和shm的区别
在使用docker的过程中,发现其有很多内存相关的命令,对其中的swap(交换内存)和shm(共享内存)尤其费解.于是查阅了一些资料,弄明白了二者的基本区别. swap 是一个文件,是使用硬盘空间的一 ...
- 自定义Toast的出现样式
使用下面的方法来获取一个Toast对象: private Toast showShortToast() { if (toast == null) { toast = new Toast(this); ...
- linux同步当前网络时间
[root@root ~]# yum install -y ntpdate 执行:ntpdate[root@root ~]# ntpdate 120.24.81.91或[root@root ~]# n ...
- Flutter01-学习准备
1. 简介: Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和 ...