1. 程式人生 > >C++ 將字串和陣列拼接起來

C++ 將字串和陣列拼接起來

參考:https://blog.csdn.net/PROGRAM_anywhere/article/details/63720261

java中的String類,連線字元和數字僅需一個+號,但c++中的string類,+號只能用於連線兩個string型別的字元,如需連線字元和數字,則需自己寫程式來實現

參考博文中給出了四種方式,分別利用了不同的c++函式和特性

//c風格

//使用sprintf()函式,將多個不同型別的變數輸入到char型陣列中

//sprintf()函式中第一個引數就是指向要寫入的那個字串的指標,剩下的和printf()一樣

#include <stdio.h>

void test() {

    char *s = "doing";

    int a = 52;

    float b = .1314;

    char *buf = new char[strlen(s) + sizeof(a) + 1];

    sprintf(buf, %s%d%.4f, s, a, b);

    printf(%s\n, buf);

}

//半c半c++風格

//itoa()函式可將數字轉化為字串(char型別陣列),再用+號將原字元與數字字串連線起來

//itoa()函式有三個引數,1、要轉換的數字;2、要寫入轉換結果的目標字串;3、轉換數字時所用的基數(2-36進位制)

//itoa()函式並不是標準的C函式,它是Windows特有的,若要寫跨平臺的程式,需用sprintf()函式

//_itoa_s()函式,c++11版本後,如VS2013版本以後對該函式進行了修改,並定義了更加安全穩定的介面_itoa_s(),使用方法同itoa()函式一樣

#include <stdlib.h>;//或

#include <cstdlib>;

#include <iostream>

using namespace std;

void test1() {

    string s = "dong";
    int a = 520;
    char *buf = new char[10];
    _itoa_s(a, buf, 10);     
    cout << s + buf << " | ";
    _itoa_s(a, buf, 16);
    cout << s + buf << endl;

}

//純c++風格

//字串流,ostringstream , 由ostream派生而來,提供寫string的功能

//ostringstream的一個常見用法是,在多種資料型別之間實現轉換或格式化

#include <iostream>

#include <sstream>

void test2()
{
    string s = "陳明東";
    int a = 52;
    double b = .1314;
    ostringstream oss;
    oss << s << a << b;//將s、a、b寫入oss流中
    cout << oss.str() << endl;//列印oss中儲存的string型別物件

}

//C++11新特性

//std::to_string()是C++標準(2011年)的最新版本引入的全域性函式,可將其他型別轉換為string

#include <iostream>
#include <string>

void test3()

{
    int a = 520;
    float b = 5.20;
    string str = "dong";
    string res = str + to_string(a);
    cout << res << endl;
    res = str + to_string(b);
    res.resize(8);
    cout << res << endl;
}