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 0;
}

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",2)  // 固定位置后子串在母串的位置
  int index1 = s.rfind("h"); // 从串尾向前查找
  printf("(find()):字母h在母串中的位置为:%d\n", index);
  printf("(rfind()):字母h在母串中的位置为:%d", index1);
  return 0;
}

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

#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(5);    // s会变为 hello
  cout<<s<<endl;
  s.resize(10,'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"),2,"#"); // 把从第一个h开始的两个字符变为一个字符 #
  cout<<"替换后的字符串为: "<<s<<endl;

}

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

// 替换字符串里的所有指定字符
string replace(string &base, string src, string dst) //base为原字符串,src为被替换的子串,dst为新的子串
{
  int pos = 0, 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"),3);
  cout<<"擦除过后的串"<<s<<endl; // 将会输出lo worldh
}

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

#include <iostream>
#include <string>
using namespace std;

int main(void)
{
  s = s.substr(0,5);
  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 = 0;
    bool flag = false;           // 标记
    string c_chars(chars);         // 构造c_chars保存chars
    for (int i = 0; i < words.size(); i++) // 迭代单词表
    {
      if (c_chars.size() < words[i].size()) //如果单词的字母多于可选字母,则跳过这个单词
        continue;
      for (int j = 0; j < words[i].size(); j++) // 迭代可选择的字母
      {
        int index = c_chars.find(words[i][j]);
        if (index != c_chars.npos) // 能找到这个字母
        {
          flag = true;
          c_chars.erase(index, 1); // 从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 中的方法的使用详解(心得)的文章就介绍到这了,更多相关C++ string方法使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++中CString string char* char 之间的字符转换(多种方法)

    首先解释下三者的含义 CString 是一种很有用的数据类型.它们很大程度上简化了MFC中的许多操作(适用于MFC框架),使得MFC在做字符串操作的时候方便了很多.需要包含头文件#include <afx.h> C++是字符串,功能比较强大.要想使用标准C++中string类,必须要包含#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件.Char * 专门用于指以'\0'为结束的字符串. 以下

  • 详解C++ string常用截取字符串方法

    string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求: find(string strSub, npos); find_last_of(string strSub, npos); 其中strSub是需要寻找的子字符串,npos为查找起始位置.找到返回子字符串首次出现的位置,否则返回-1: 注: (1)find_last_of的npos为从末尾开始寻找的位置. (2)下文中用到的strsub(npos,size)函数,其中npos为开始位置,size为截取大小 例1:直接查

  • C++ 读文件 将文件内容读入到字符串string中的方法

    如下所示: #include <string> #include <fstream> #include <sstream> #include <iostream> #include <stdlib.h> using namespace std; //从文件读入到string里 string readFileIntoString(char * filename) { ifstream ifile(filename); //将文件读入到ostring

  • 使用C++中string实现任意长度的正小数、整数之间加减法方法实例

    一.概述 C/C++中的int类型能表示的范围是-2E31-2E31–1.unsigned类型能表示的范围是0-2E32–1,即 0-4294967295.所以,int和unsigned类型变量,都不能保存超过10位的整数.有时我们需要参与运算的数,可能会远远不止10 位,例如,可能需要保留小数点后面100位(比如求π的值),那么,即便使用能表示很大数值范围的double变量,但是由于double变量只有64位,所以还是不可能达到精确到小数点后面100位这样的精度.double变量的精度也不足以

  • 对C++ string append方法的常用用法详解

    C++ string append()添加文本 使用append()添加文本常用方法: 直接添加另一个完整的字符串: 如str1.append(str2); 添加另一个字符串的某一段子串: 如str1.append(str2, 11, 7); 添加几个相同的字符: 如str1.append(5, '.'); 注意,个数在前字符在后.上面的代码意思为在str1后面添加5个".". //======================================== #include<

  • c++ String去除头尾空格的方法

    本文实例讲述了c++ String去除头尾空格的方法,分享给大家供大家参考.具体实现方法如下: 实现该功能可使用string的find_first_not_of,和find_last_not_of方法,具体实现带如下: 复制代码 代码如下: #include <iostream> #include <string> std::string& trim(std::string &); int main() {     std::string s = " He

  • C++实现string存取二进制数据的方法

    本文实例讲述了C++实现string存取二进制数据的方法,分享给大家供大家参考.具体方法分析如下: 一般来说,STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考. 首先提一下STL中string的参考资料:http://www.cplusplus.com/reference/string/string/ ,不懂的朋友可以看下. 在数据传输中,二进制数据的buffer一般用系统预设的大数组进行存储,而不是STL的s

  • c++ int转string方法

    复制代码 代码如下: /************************************************************************/ /* int to string */ /************************************************************************/ std::string CCardDispatcher::ItoA(int n){ char ss[16]; //这个长度根据需要吧 sp

  • C++中 string 中的常用方法使用心得

    string 字符串在所有的语言中都非常重要,c++也不例外,接下来我们将介绍string中的常用方法 1. size() 和 length() 函数 : 他们返回字符串的真实长度,且不会因为空格而截断,这两个方法完全等价,使用及输出如下: #include<iostream> #include<string> using namespace std; int main(void) { string s = "dasddasd"; printf("si

  • C++中string类的常用方法实例总结

    目录 引言 C++string类常用方法 总结 引言 C++中提供了一种新的数据类型——字符串类型(string).实际上string并不是C++的基本类型,它是在C++标准库中声明的一个字符串类,用这种数据类型可以定义对象,每一个字符串变量都是string类的一个对象.标准库类型string表示可变长的字符序列,使用string类型必须首先包含它的头文件. 作为标准库的一部分,string定义在命名空间std中. [例] #include<string>//注意这里没有.h using na

  • Java中String类的常用方法总结

    目录 概述 特点 使用步骤 常用方法 判断功能的方法 获取功能的方法 转换功能的方法 分割功能的方法 概述 java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如"abc" )都可以被看作是实现此类的实例. 类 String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻 译为大写或小写的所有字符的字符串的副本. 特点 字符串不变:字符串的值在创建后不能被更改. String s1 = "abc&quo

  • java string类的常用方法详细介绍

    String : 字符串类型 一.构造函数 复制代码 代码如下: String(byte[ ] bytes):通过byte数组构造字符串对象. String(char[ ] value):通过char数组构造字符串对象. String(Sting original):构造一个original的副本.即:拷贝一个original. String(StringBuffer buffer):通过StringBuffer数组构造字符串对象. 例如: 复制代码 代码如下: byte[] b = {'a',

  • javascript中数组(Array)对象和字符串(String)对象的常用方法总结

    本文实例总结了javascript中数组(Array)对象和字符串(String)对象的常用方法.分享给大家供大家参考,具体如下: 综述:笔者经常将数组的方法和字符串的方法混淆,这里写篇日志,做个区分 1.字符串对象 String是JavaScript中的五种基本类型之一. (1)字符串对象的创建 例1: var str="Hello world"; 或者 var str=new String("Hello world") (2)charAt()方法 charAt(

  • C#中String类常用方法汇总

    本文实例汇总了C#中String类常用方法.分享给大家供大家参考.具体分析如下: C#中的String类很有用,下面是一些它的常用方法的总结,如果灵活运用这些的话,String类就掌握的差不多了. .ToLower()    //转为小写字符串"AbC"-->"abc" .ToUpper()    //转为大写"AbC" -->"ABC" .Trim()       //去掉字符串首尾的空格"  abc

  • Javascript中String的常用方法实例分析

    本文实例讲述了Javascript中String的常用方法.分享给大家供大家参考.具体如下: // length属性:获取字符串的字符个数. var s='爱像一阵风'; alert(s.length); // charAt(index)方法:获取指定索引位置的字符,索引从0开始 var s1='我不要再想你'; alert(s1.charAt(4));//想 // indexOf('e',startIndex)方法:获取指定字符串第一次出现的位置.startIndex表示从第几个开始搜索. v

  • 浅谈Java中String的常用方法

    String中常用的方法,我以代码的形式,来说明这些常用的方法. @Test public void test1(){ //1.返回字符串的长度 String s1 = "helloworld"; System.out.println(s1.length()); //2.返回某索引处的字符 System.out.println(s1.charAt(1)); //3.判断字符串是否是空字符串 System.out.println(s1.isEmpty()); //4.将String中的所

  • Java中String类常用方法使用详解

    目录 一.length() 二.equals 三.charAt() 四.indexOf() 五.trim() 六.compareTo() 七.toLowerCase() 八.toUpperCase() 九.replace() 十.substring(int beginIndex) 十一.substring(int beginIndex, int endIndex) 总结 一.length() 返回此字符串的长度 public static void main4(String[] args) {

  • Java中String类常用方法总结详解

    目录 一. String对象的比较 1. ==比较是否引用同一个对象 2. boolean equals(Object anObject) 3. int compareTo(String s) 4. int compareToIgnoreCase(String str) 二. 字符串查找 三. 转化 1. 数值和字符串转化 2. 大小写转化 3. 字符串和数组的转换 4. 格式化 四. 字符串替换 五. 字符串拆分 六. 字符串截取 七. 其他操作方法 1. String trim() 2. b

随机推荐