最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年03月26日 08:58:48   作者:maoqifan  
這篇文章主要介紹了C++中 string 中的常用方法使用心得,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

string 字符串在所有的語言中都非常重要,c++也不例外,接下來我們將介紹string中的常用方法

1. size() 和 length() 函數(shù) : 他們返回字符串的真實長度,且不會因為空格而截斷,這兩個方法完全等價,使用及輸出如下:

#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()函數(shù)和rfind()函數(shù) : 這兩個函數(shù)用于查找字串在母串中的位置,并且返回該位置,當然如果找不到就會返回一個特別的標記string::nops,而find()函數(shù)是從字符串開始指針向后進行查找,rfind()函數(shù)是從字符串的結(jié)束指針開始向前查找,其使用及輸出如下:

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

值得注意的是我們可以通過組合使用這兩個函數(shù)來實現(xiàn)判斷該子串是否唯一存在于母串中,其實現(xiàn)代碼如下:

#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()函數(shù)和find_first_of()函數(shù):從函數(shù)名我們也可以知道find_last_of()函數(shù)是找這個子串在母串中最后一次出現(xiàn)的位置并且將該位置返回;而find_first_of()函數(shù)是找這個子串在母串中最后一次出現(xiàn)的位置并將該位置返回,其使用及輸出如下:

#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()函數(shù):該函數(shù)用于將目標串的值復制到該串上,并且只復制值,其使用及輸出如下:

#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()函數(shù),把當前字符串清空,這時候如果調(diào)用string::size()函數(shù)或string::length()函數(shù)將返回0,其使用及輸出如下:

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

int main(void)
{
  string s = "hello worldh";
  s.clear();
  cout<<"clear后的串的長度"<<s.size()<<endl;
}

6.resize()函數(shù),該函數(shù)可以將字符串變長到指定長度,若小于原本字符串的長度,則會截斷原字符串;這個函數(shù)的一個重載形式是str.resize(length,'s') 可以用該輸入字符's'來對字符串進行擴充至length的長度,該函數(shù)的使用及輸出如下:

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

int main(void)
{
  string s = "hello worldh";
  s.resize(5);    // s會變?yōu)?hello
  cout<<s<<endl;
  s.resize(10,'C'); // s 會變?yōu)?helloCCCCC
  cout<<s<<endl;
  
}

7. replace(pos,len,dist)函數(shù): 該函數(shù)用于將該串從pos位置開始將長度為len的字串替換為dist串,值得注意的是該函數(shù)只替換一次,這與市面上的py和java等語言不一樣,需要留意,該函數(shù)的使用和輸出如下:

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

int main(void)
{
  string s = "hello worldh";
  s.replace(s.find("h"),2,"#"); // 把從第一個h開始的兩個字符變?yōu)橐粋€字符 #
  cout<<"替換后的字符串為: "<<s<<endl;
  
}

那么既然C++本身不提供,替換所有子串的函數(shù),我們就自己實現(xiàn)一個,其代碼如下:

// 替換字符串里的所有指定字符
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)函數(shù):該函數(shù)刪除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)函數(shù):該函數(shù)從index開始截斷到長度為length并返回截斷的子串;值得注意的是,該函數(shù)不改變母串的值,其使用及輸出如下:

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

int main(void)
{
  s = s.substr(0,5); 
  cout<<"截斷并賦值后的字符串為:"<<s<<endl; // 會輸出hello
}

10 . push_back(char c)函數(shù),pop_back()函數(shù),append(string s)函數(shù):push_back(char c)函數(shù)往該字符串的尾端加入一個字符;pop_back()函數(shù)從該字符串的尾端彈出一個字符;而apend(string s)函數(shù)將會在該字符串的末尾添加一個字符串,并且返回添加后字符串的引用。他們的使用及輸出如下圖所示:

#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中比較重要的函數(shù)的全部內(nèi)容了,既然我們學完了該內(nèi)容,那我們接下來做一條題來熟悉一下這些函數(shù)中的一些吧(題目與代碼如下代碼塊,題目出自leetcode):

// 給你一份『詞匯表』(字符串數(shù)組) 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);         // 構(gòu)造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;    //跳出這次循環(huán)
        }
      }
      if (flag) // 如果符合則計數(shù)加1
        count += words[i].size();
      c_chars.assign(chars); // 把chars的值在再次賦值給c_chars
    }
    return count;
  }
};

最后感謝大家的閱讀,string中這些的函數(shù)組合起來可以說是威力無窮,所以還是要好好掌握的。

總結(jié)

到此這篇關(guān)于C++中 string 中的方法的使用詳解(心得)的文章就介紹到這了,更多相關(guān)C++ string方法使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C++中const_cast與reinterpret_cast運算符的用法

    詳解C++中const_cast與reinterpret_cast運算符的用法

    這篇文章主要介紹了C++中const_cast與reinterpret_cast運算符的用法,經(jīng)常被用于表達式中的類型轉(zhuǎn)換,需要的朋友可以參考下
    2016-01-01
  • 教你Visual?Studio?2022如何新建一個C語言工程(圖文詳解)

    教你Visual?Studio?2022如何新建一個C語言工程(圖文詳解)

    這篇文章主要介紹了Visual?Studio?2022如何新建一個C語言工程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • C語言實現(xiàn)Fibonacci數(shù)列遞歸

    C語言實現(xiàn)Fibonacci數(shù)列遞歸

    這篇文章主要介紹了C語言實現(xiàn)Fibonacci數(shù)列遞歸,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • C++ vector的介紹及常見功能實現(xiàn)

    C++ vector的介紹及常見功能實現(xiàn)

    這篇文章主要介紹了C++ vector的介紹及模擬實現(xiàn),vector在實際中非常的重要,但在實際中我們只要熟悉常見的接口就可以了,最重要的是理解他的底層原理,要能夠自己模擬實現(xiàn)出一個簡單的vector,本文結(jié)合示例代碼給大家詳細介紹,需要的朋友可以參考下
    2023-05-05
  • C++實現(xiàn)LeetCode(68.文本左右對齊)

    C++實現(xiàn)LeetCode(68.文本左右對齊)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(68.文本左右對齊),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++?BoostAsyncSocket實現(xiàn)異步反彈通信的案例詳解

    C++?BoostAsyncSocket實現(xiàn)異步反彈通信的案例詳解

    這篇文章主要為大家詳細介紹了C++?BoostAsyncSocket如何實現(xiàn)異步反彈通信,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的可以了解一下
    2023-03-03
  • vector, list, map在遍歷時刪除符合條件的元素實現(xiàn)方法

    vector, list, map在遍歷時刪除符合條件的元素實現(xiàn)方法

    下面小編就為大家?guī)硪黄獀ector, list, map在遍歷時刪除符合條件的元素實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++實現(xiàn)LeetCode(37.求解數(shù)獨)

    C++實現(xiàn)LeetCode(37.求解數(shù)獨)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(37.求解數(shù)獨),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言標準庫<math.h>和<setjmp.h>的實現(xiàn)

    C語言標準庫<math.h>和<setjmp.h>的實現(xiàn)

    本文主要介紹了C語言標準庫<math.h>和<setjmp.h>的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • C++?const與constexpr區(qū)別小結(jié)

    C++?const與constexpr區(qū)別小結(jié)

    C++11標準中,const用于為修飾的變量添加只讀屬性,而constexpr關(guān)鍵字則用于指明其后是一個常量,本文主要介紹了C++?const與constexpr區(qū)別小結(jié),感興趣的可以了解一下
    2024-03-03

最新評論

田林县| 长垣县| 兴和县| 遵化市| 黎平县| 乡城县| 阿拉善左旗| 怀柔区| 沾化县| 大庆市| 郧西县| 遂平县| 泰州市| 金门县| 鄢陵县| 娄烦县| 昌图县| 定州市| 买车| 通许县| 陆川县| 湄潭县| 福安市| 阳新县| 怀柔区| 广水市| 嵊泗县| 丽江市| 宜君县| 成安县| 普安县| 揭阳市| 丰原市| 富顺县| 特克斯县| 涿州市| 响水县| 临沧市| 邢台市| 沈阳市| 剑河县|