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

C++string字符串拼接遇到的問題及解決

 更新時間:2023年07月31日 17:00:24   作者:萬能的小陳  
這篇文章主要介紹了C++string字符串拼接遇到的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

C++string字符串拼接問題

C++ 字符串拼接

最初嘗試

//目的: 把字符串student_ 和A拼接起來
string nameseed = "ABCDE";
string name;
name="student_" +nameseed[0];
cout<<"拼接后的字符串:"<<name<<endl;

輸出:拼接后的字符串:ange

運行結(jié)果

再次嘗試

方法1

string nameseed = "ABCDE";
string name;
name = std::string("student_")+ nameseed[0];
cout<<"拼接后的字符串:"<<name<<endl;

輸出:拼接后的字符串:student_A

方法2

string nameseed = "ABCDE";
string name;
name = "student_";
name += nameseed[0];
cout << "拼接后的字符串:" << name << endl;

輸出:拼接后的字符串:student_A

心得

對于string類變量,我們可以直接用“+”或者“+=”進(jìn)行字符串的連接。

  • 用“+”進(jìn)行字符串連接時,操作符左右兩邊既可以都是string類變量,也可以是一個string類變量和一個C風(fēng)格的字符串,還可以是一個string字符串和一個char型字符。
  • 用“+=”進(jìn)行字符串連接時,操作符右邊既可以是一個string字符串,也可以是一個C風(fēng)格字符串或一個char型字符。

上述兩種方法:左邊必須是string類字符串。

string類字符串進(jìn)行連接時,c++中默認(rèn)"student_"字符串為char*型,而不是我們想象中的string類變量,而"student_"又處在等式的最左邊,所以并沒有實現(xiàn)我們想要的目的。

C++字符串拼接性能測試

測試說明

本文對C++字符串拼接操作的四種運行:+=、append、stringstream、sprintf 進(jìn)行簡單的性能測試,

測試方法

比較方法是寫了4個函數(shù),分別用+=、append、stringstream、sprintf的方式來拼接字符串,拼接方法是將 s1=“abcedfg”,s2=“hijklmn”,s3="opqrst"三個字符串拼接到一起,總共循環(huán)60次。

然后在main函數(shù)中依次調(diào)用這4 個函數(shù),并打時間戳來計時。為了使時間差異更明顯,可以取循環(huán)N(N可以為100或是1000000等)次調(diào)用的時間。

測試結(jié)果

下表顯示的為進(jìn)行時間,單位為 μ \mu μs.

操作\循環(huán)次數(shù)1,000,000100,00010,0001,000100
+=3,405,450337,22932,1773,402369
append()4,020,078401,71940,2654,074429
Sstime7,835,499788,24278,9287,984921
sprintf14,875,4331,517,999150,83915,4251,591

源代碼

#include <iostream>
#include <string>
#include <sys/time.h>
#include <sstream>
#include <stdio.h>
using namespace std;
#define OUT_IN_REPEATE_NUM 10000
#define IN_REPEATE_NUM 60
string s1="abcedfg";
string s2="hijklmn";
string s3="opqrst";
void  plusTest(string& ret)
{
    for(int i=0; i<IN_REPEATE_NUM; i++)
    {
        ret += s1;
        ret += s2;
        ret += s3;
    }
}
void  appendTest(string& ret)
{
    for(int i=0; i<IN_REPEATE_NUM; i++)
    {
        ret.append(s1);
        ret.append(s2);
        ret.append(s3);
    }
}
void sprintfTest(string& ret)
{
    const size_t length=26*IN_REPEATE_NUM;
    char tmp[length];
    char* cp = tmp;
    size_t strLength=s1.length()+s2.length()+s3.length();
    for(int i=0; i<IN_REPEATE_NUM; i++)
    {
        sprintf(cp,"%s%s%s", s1.c_str(), s2.c_str(),s3.c_str());
        cp+=strLength;
    }
    ret = tmp;
}
void  ssTest(string& ret)
{
    stringstream ss;
    for(int i=0; i<IN_REPEATE_NUM; i++)
    {
        ss<<s1;
        ss<<s2;
        ss<<s3;
    }
    ret = ss.str();
}
int main() {
    string ss, plus, append, sprintf;
    struct timeval sTime, eTime;
    gettimeofday(&sTime, NULL);
    for(int i=0; i<OUT_IN_REPEATE_NUM; i++)
    {
        sprintf="";
        sprintfTest(sprintf);
    }
    gettimeofday(&eTime, NULL);
    long SprintfTime = (eTime.tv_sec-sTime.tv_sec)*1000000+(eTime.tv_usec-sTime.tv_usec); //exeTime 單位是微秒
    gettimeofday(&sTime, NULL);
    for(int i=0; i<OUT_IN_REPEATE_NUM; i++)
    {
        append="";
        appendTest(append);
    }
    gettimeofday(&eTime, NULL);
    long AppendTime = (eTime.tv_sec-sTime.tv_sec)*1000000+(eTime.tv_usec-sTime.tv_usec); //exeTime 單位是微秒
    gettimeofday(&sTime, NULL);
    for(int i=0; i<OUT_IN_REPEATE_NUM; i++)
    {
        ss="";
        ssTest(ss);
    }
    gettimeofday(&eTime, NULL);
    long SsTime = (eTime.tv_sec-sTime.tv_sec)*1000000+(eTime.tv_usec-sTime.tv_usec); //exeTime 單位是微秒
    gettimeofday(&sTime, NULL);
    for(int i=0; i<OUT_IN_REPEATE_NUM; i++)
    {
        plus="";
        plusTest(plus);
    }
    gettimeofday(&eTime, NULL);
    long PlusTime = (eTime.tv_sec-sTime.tv_sec)*1000000+(eTime.tv_usec-sTime.tv_usec); //exeTime 單位是微秒
    cout<<"PlusTime is :   "<<PlusTime<<endl;
    cout<<"AppendTime is : "<<AppendTime<<endl;
    cout<<"SsTime is :     "<<SsTime<<endl;
    cout<<"SprintfTime is :"<<SprintfTime<<endl;
    if(ss==sprintf && append==plus && ss==plus)
    {
        cout<<"They are same"<<endl;
    }
    else
    {
        cout<<"Different!"<<endl;
        cout<<"Sprintf: "<<sprintf<<endl;
        cout<<"ss:        "<<ss<<endl;
        cout<<"Plus:     "<<plus<<endl;
        cout<<"Append:"<<append<<endl;
    }
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于C語言實現(xiàn)簡單的掃雷游戲

    基于C語言實現(xiàn)簡單的掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了基于C語言實現(xiàn)簡單的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言中的時間函數(shù)clock()和time()你都了解嗎

    C語言中的時間函數(shù)clock()和time()你都了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語言中的時間函數(shù)clock()和time(),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++ Boost庫中Chrono時間模塊的基本使用示例詳解

    C++ Boost庫中Chrono時間模塊的基本使用示例詳解

    BoostChrono庫操作詳解,涵蓋基本概念、常用的類型與操作示例,這篇文章給大家介紹C++ Boost庫中Chrono時間模塊的基本使用示例,感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • C++ decltype 說明符

    C++ decltype 說明符

    這篇文章主要介紹了C++ decltype 說明符,檢查實體的聲明類型,或表達(dá)式的類型和值類別。下面我們來看看文章中的具體內(nèi)容吧

    2021-12-12
  • C++ 在 Unreal 中為游戲增加實時音視頻互動的教程詳解

    C++ 在 Unreal 中為游戲增加實時音視頻互動的教程詳解

    這篇文章主要介紹了C++ 在 Unreal 中為游戲增加實時音視頻互動的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • c++靜態(tài)局部變量和靜態(tài)函數(shù)示例

    c++靜態(tài)局部變量和靜態(tài)函數(shù)示例

    這篇文章主要介紹了c++靜態(tài)局部變量和靜態(tài)函數(shù)示例,需要的朋友可以參考下
    2014-04-04
  • C語言動態(tài)規(guī)劃多種背包問題分析講解

    C語言動態(tài)規(guī)劃多種背包問題分析講解

    背包問題(Knapsack problem)是一種組合優(yōu)化的NP完全問題。問題可以描述為:給定一組物品,每種物品都有自己的重量和價格,在限定的總重量內(nèi),我們?nèi)绾芜x擇,才能使得物品的總價格最高
    2022-04-04
  • C語言內(nèi)嵌匯編API內(nèi)存搜索引擎實例

    C語言內(nèi)嵌匯編API內(nèi)存搜索引擎實例

    這篇文章主要介紹了C語言內(nèi)嵌匯編API內(nèi)存搜索引擎實例,涉及匯編語言與內(nèi)存相關(guān)操作,需要的朋友可以參考下
    2014-10-10
  • C++?opencv實現(xiàn)在圖片上畫一條線示例代碼

    C++?opencv實現(xiàn)在圖片上畫一條線示例代碼

    這篇文章主要為大家介紹了C++?opencv實現(xiàn)在圖片上畫一條線的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Qt實現(xiàn)文本編輯器(一)

    Qt實現(xiàn)文本編輯器(一)

    在Qt中QMainWindow是一個為用戶提供主窗口程序的類,包含了:菜單欄、工具欄、錨接部件、狀態(tài)欄以及一個中部件。本文將利用QMainWindow制作一個文本編輯器,感興趣的可以試一試
    2022-01-01

最新評論

辉县市| 仁怀市| 新营市| 盐山县| 潞城市| 诏安县| 商都县| 曲水县| 边坝县| 罗源县| 阜南县| 太仓市| 板桥市| 岐山县| 凤阳县| 龙州县| 青州市| 富川| 台南市| 时尚| 璧山县| 鹤峰县| 固镇县| 读书| 仪陇县| 石狮市| 咸阳市| 金平| 墨江| 哈尔滨市| 舟曲县| 翼城县| 建德市| 页游| 苗栗县| 宁陕县| 和静县| 道真| 临颍县| 勐海县| 梅州市|