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

如何在c++中實(shí)現(xiàn)字符串分割函數(shù)split詳解

 更新時(shí)間:2019年11月26日 08:33:16   作者:青荼  
這篇文章主要給大家介紹了關(guān)于如何在c++中實(shí)現(xiàn)字符串分割函數(shù)split的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

在學(xué)習(xí)c++中string相關(guān)基本用法的時(shí)候,發(fā)現(xiàn)了sstream的istringstream[1]可以將字符串類(lèi)似于控制臺(tái)的方式進(jìn)行輸入,而實(shí)質(zhì)上這個(gè)行為等同于利用空格將一個(gè)字符串進(jìn)行了分割,于是考慮到可以利用這個(gè)特性來(lái)實(shí)現(xiàn)c++庫(kù)函數(shù)中沒(méi)有的字符串分割函數(shù)split

string src("Avatar 123 5.2 Titanic K");
istringstream istrStream(src); //建立src到istrStream的聯(lián)系
string s1, s2;
int n; double d; char c;
istrStream >> s1 >> n >> d >> s2 >> c;
//以空格為分界的各數(shù)值則輸入到了對(duì)應(yīng)變量上

實(shí)現(xiàn)細(xì)節(jié)

目的是可以像js中一樣,調(diào)用一個(gè)函數(shù)即可以方便地獲取到處理完畢后的字符串?dāng)?shù)組,根據(jù)c++的實(shí)際情況再進(jìn)行參數(shù)調(diào)整。

1. 輸入輸出:

string* split(int& length, string str, const char token = ' ')

返回:處理完的字符串?dāng)?shù)組的首地址

傳入:字符串str、分隔符token(默認(rèn)參數(shù)為空格)、以及引用參數(shù)length,指明處理完畢后動(dòng)態(tài)分配的數(shù)組長(zhǎng)度

2. 數(shù)據(jù)透明處理:

由于istringstream會(huì)像cin一樣,把空格視為數(shù)據(jù)間的界限,所以當(dāng)分隔符不是空格時(shí),需要將傳入的分隔符換為空格,并且要提前對(duì)原有空格進(jìn)行數(shù)據(jù)透明處理

字符替換利用了庫(kù)algorithm中的replace() [2]

 const char SPACE = 0;
 if(token!=' ') {
 // 先把原有的空格替換為ASCII中的不可見(jiàn)字符
 replace(str.begin(), str.end(), ' ', SPACE); 
 // 再把分隔符換位空格,交給字符串流處理
 replace(str.begin(), str.end(), token, ' ');
 }

  假設(shè)輸入字符串為:"a b,c,d,e,f g"
  分隔符為非空格:','
  則被替換為:"aSPACEb c d e fSPACEg"

3. 數(shù)據(jù)分割:

 //實(shí)例化一個(gè)字符串輸入流,輸入?yún)?shù)即待處理字符串
 istringstream i_stream(str); 
 //將length置零
 length = 0; 
 queue<string> q;
 //用一個(gè)string實(shí)例s接收輸入流傳入的數(shù)據(jù),入隊(duì)并計(jì)數(shù)
 string s;
 while (i_stream>>s) {
 q.push(s);
 length++;
 }

4. 數(shù)組生成:

 //根據(jù)計(jì)數(shù)結(jié)果動(dòng)態(tài)開(kāi)辟一個(gè)字符串?dāng)?shù)組空間
 string* results = new string[length]; 
 //將隊(duì)列中的數(shù)據(jù)轉(zhuǎn)入數(shù)組中
 for (int i = 0; i < length; i++) {
 results[i] = q.front();
 //將替換掉的空格進(jìn)行還原
 if(token!=' ') replace(results[i].begin(), results[i].end(), SPACE, ' ');
 q.pop();
 }

完整代碼

#include <iostream>
#include <string>
#include <queue>
#include <sstream>
#include <algorithm>
using namespace std;

string* split(int& length, string str,const char token = ' ') {
 const char SPACE = 0;
 if(token!=' ') {
 replace(str.begin(), str.end(), ' ', SPACE);
 replace(str.begin(), str.end(), token, ' ');
 }
 istringstream i_stream(str);
 queue<string> q;
 length = 0;
 string s;
 while (i_stream>>s) {
 q.push(s);
 length++;
 }
 string* results = new string[length];
 for (int i = 0; i < length; i++) {
 results[i] = q.front();
 q.pop();
 if(token!=' ') replace(results[i].begin(), results[i].end(), SPACE, ' ');
 }
 return results;
}

//測(cè)試:
int main() {
 int length;
 string* results = split(length, "a b,c,d,e,f g", ',');
 for (int i = 0; i < length; i++) cout<<results[i]<<endl;
 return 0;
}

參考

[1] C++ string類(lèi)(C++字符串)完全攻略

[2] C++ string 替換指定字符

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • OpenCV c++滑動(dòng)條的創(chuàng)建和使用代碼

    OpenCV c++滑動(dòng)條的創(chuàng)建和使用代碼

    滾動(dòng)條(Trackbar)在OpenCV中是非常方便的交互工具,它依附于特定的窗口而存在,下面這篇文章主要給大家介紹了關(guān)于OpenCV?c++滑動(dòng)條的創(chuàng)建和使用的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 基于VS+Opencv2.4.10微信跳一跳輔助工具

    基于VS+Opencv2.4.10微信跳一跳輔助工具

    這篇文章主要為大家詳細(xì)介紹了基于VS+Opencv2.4.10微信跳一跳輔助工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語(yǔ)言中用棧+隊(duì)列實(shí)現(xiàn)隊(duì)列中的元素逆置

    C語(yǔ)言中用棧+隊(duì)列實(shí)現(xiàn)隊(duì)列中的元素逆置

    這篇文章主要介紹了C語(yǔ)言中用利用棧和隊(duì)列實(shí)現(xiàn)隊(duì)列中的元素逆置的相關(guān)資料,對(duì)正在學(xué)習(xí)的小伙伴有一定的參考價(jià)值,需要的可以參考一下,希望對(duì)你有所幫助
    2022-02-02
  • C++印刷模板使用方法詳解

    C++印刷模板使用方法詳解

    模板是C++支持參數(shù)化多態(tài)的工具,使用模板可以使用戶為類(lèi)或者函數(shù)聲明一種一般模式,使得類(lèi)中的某些數(shù)據(jù)成員或者成員函數(shù)的參數(shù)、返回值取得任意類(lèi)型
    2022-11-11
  • 編輯器寫(xiě)C語(yǔ)言輸出中文亂碼問(wèn)題及解決

    編輯器寫(xiě)C語(yǔ)言輸出中文亂碼問(wèn)題及解決

    這篇文章主要介紹了編輯器寫(xiě)C語(yǔ)言輸出中文亂碼問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Pipes實(shí)現(xiàn)LeetCode(192.單詞頻率)

    Pipes實(shí)現(xiàn)LeetCode(192.單詞頻率)

    這篇文章主要介紹了Pipes實(shí)現(xiàn)LeetCode(192.單詞頻率),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語(yǔ)言利用EasyX繪制小企鵝表情包

    C語(yǔ)言利用EasyX繪制小企鵝表情包

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言如何利用EasyX繪圖庫(kù)實(shí)現(xiàn)繪制可愛(ài)的小企鵝表情包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-12-12
  • C++11 強(qiáng)類(lèi)型枚舉相關(guān)總結(jié)

    C++11 強(qiáng)類(lèi)型枚舉相關(guān)總結(jié)

    這篇文章主要介紹了C++11 強(qiáng)類(lèi)型枚舉的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++11,感興趣的朋友可以了解下
    2021-02-02
  • c++ 快速排序算法【過(guò)程圖解】

    c++ 快速排序算法【過(guò)程圖解】

    下面小編就為大家?guī)?lái)一篇c++ 快速排序算法【過(guò)程圖解】。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • C語(yǔ)言的冒泡排序和快速排序算法使用實(shí)例

    C語(yǔ)言的冒泡排序和快速排序算法使用實(shí)例

    這篇文章主要介紹了C語(yǔ)言的冒泡排序和快速排序算法使用實(shí)例,示例題目也是ACM練習(xí)當(dāng)中的基礎(chǔ)習(xí)題,需要的朋友可以參考下
    2015-08-08

最新評(píng)論

凤翔县| 曲麻莱县| 疏附县| 永川市| 新营市| 兰坪| 南康市| 夏津县| 绍兴县| 济宁市| 赤水市| 赤水市| 四川省| 岐山县| 洪雅县| 同江市| 贵港市| 逊克县| 启东市| 崇州市| 五莲县| 长武县| 会东县| 达尔| 佛冈县| 敖汉旗| 清涧县| 富源县| 河南省| 南乐县| 中宁县| 岚皋县| 丹江口市| 东城区| 延安市| 汤原县| 阳山县| 白山市| 新乐市| 武山县| 从江县|