C C 語言中如何優雅地拼接多段字串?

時間 2021-05-31 02:23:07

1樓:熊貓刷牙

如果是C++的話過載運算子是最優解 【優雅】String s1 = "ABC" ;

s1 += "abc";

String s2 = s1 + "DEF"

2樓:熊起

imperfect C++裡有個兼顧效率和表達簡介的思路,脫去語法糖大體是這樣效果:

int a, float b, char* c;

stringbuilderproxy(a)(b)(c).link();

過載操作符帶上語法糖大概是這樣:

string s = link(start,a,b,c)。

效率的瓶頸在於標準庫 string的operator +多次重新分配空間,所以應該算清所需空間後只在堆上分配一次

3樓:

兩個字面字串拼接,中間可以加任意空白符,是C的語法主要目的是防止字串過長不方便閱讀,所以可以中間插入換行符分成兩個字串

你所謂不支援那一行,多了個點 .

字串格式化是最優雅的拼接字串的方式,可以一眼看到字串的全貌,以及哪個位置要填入什麼,除了C++所有語言都支援

越界、型別是C語言本身的問題,跟格式化無關。新一點的編譯器都能給型別警告

4樓:pansz

常量(準確說是文字量)可以直接拼接,而且是編譯期拼接,效率高,你的寫法是對的。

變數的話,C語言最優雅的方法是用 sprintf 或者同族的類似函式。相信我,string format 是個優雅的天才的設計,無可替代。

C++等物件導向的語言呢,可以先建乙個stringbuilder之類的類,把需要拼接的字串都當做列表專案放進去,然後最後一次性拼接。其實本質上最後那個拼接也就相當於sprintf了。

5樓:

c++就直接用加號唄,std::string裡的+都是過載過的,非常方便。

輸出就直接 <<

c語言的話 emmm

strcat或者sprint

也沒什麼別的好方法了好像

6樓:yy xx

tempalte

class ConstexprString{

public:

inline static constexpr char * getStringconstexpr char varData{Creturn varDatatemplate

class Cat;

你知道吧,大概這麼寫

using type = Cat< ConstexprString<'1','5','3'> ,ConstexprString<'a','b','c'>,ConstexprString<'h'> >::type

問題就是怎麼把乙個字串比如「abc」 => ConstexprString<'a','b','c'> ,

嗯,用巨集可以

7樓:暮無井見鈴

C++ 中用 std::string 拼接, reserve 一下,就可以只有至多一次動態分配了。你要再省這一次的話可以考慮 llvm::SmallString 或其類似物。

編譯時的問題和 C++ 的使用者定義字面量有關,加空格就好。

8樓:MashPlant

fmtlib/fmt

除此之外,我個人認為sprintf比stringstream更"優雅"一些,這兩者中我會選擇前者。

9樓:

c++中,如果是單純的字串拼接,肯定是string+,譬如:

string str=string(c字串)+c字串+字串變數+……;

如果有其他的資料型別拼接,則使用stringstream,譬如:

stringsteam tmp;

tmp<<"aaa"<<5;

string str = tmp.str();

10樓:jencol teng

一直使用absl庫,谷歌出品,信得過。

可以相容string,string_view,數值型別。

做法是預分配足夠長度再拷貝,避免二次分配

C 語言中如何優雅地拼接多段字串?

湛藍水晶 用sprintf strcat在設計之初是考慮了鏈式呼叫的,所以返回的是源位址,於是可以用 strcat strcat strcat strcat strcat strcat strcat strcat dest TEST1 ip TEST2 port TEST3 name TEST4 n...

如何優雅地反抗語言暴力?

工作中?要是忍得住,就直視對方,盯著他的眼睛,笑著說 你說什麼?麻煩再說一遍?並拿起手機,當著他的面開始錄音。要是忍不住,就轉過頭無視他,說 你現在不太冷靜,已經開始人身攻擊了,我不想和你說話,請你離開。網路上?拉黑舉報一條龍。 我記得我六年級就看過蘇東坡與和尚談論大便的故事。也可能不是蘇東坡。但是...

在C語言中,如何安全地使用void ?

Lvcs 靈活接收資料型別,可以試試使用巨集定義而不用函式 舉個例子 判斷兩個數哪個大 define MAX a,b a b a b 使用巨集定義可以靈活接收各種型別的 a b,而使用函式判斷的話就需要事先設定傳入引數的型別了。 劉燦 傳遞指標同時提供區域長度 不用0來標識字串或區域結束 以typd...