1樓:你好啊月亮
有的,可以根據以下步驟。
1. 在將各種型別的資料構造成字串時,sprintf 的強大功能很少會讓你失望。由於sprintf 跟printf 在用法上幾乎一樣,只是列印的目的地不同而已,前者列印到字串中,後者則直接在命令列上輸出。
這也導致sprintf 比printf 有用得多。
2. sprintf 是個變參函式,定義如下:int sprintf( char *buffer, const char *format [, argument] ...
);除了前兩個引數型別固定外,後面可以接任意多個引數。而它的精華,顯然就在第二個引數:格式化字串上。
3. printf 和sprintf 都使用格式化字串來指定串的格式,在格式串內部使用一些以"%"開頭的格式說明符(format specifications)來佔據一個位置,在後邊的變參列表中提供相應的變數,最終函式就會用相應位置的變數來替代那個說明符,產生一個呼叫者想要 的字串。
4. sprintf 最常見的應用之一莫過於把整數列印到字串中,所以,spritnf 在大多數場合可以替代itoa。
c++中的string字串如何初始化?
2樓:
string a; a is empty stringstring a (b); initialize a as a copy of b
string a ("djflsd"); initialize a as a copy of the string literal
string a (n, 'a'); initialize a with n copies of the character 'a'
ps: from c++ primer
3樓:匿名使用者
vs2008下string a = null;下可以這樣啊,但是一般賦值為null都是為了野指標用的,就是說給一個指標fp = null這樣使用,你這裡a就是一個物件,一般的話好像不這樣用。
4樓:
string是類。。
string a;就初始化了,類的構造韓式已經搞定一切。
或者string a = "***"也可以~
5樓:匿名使用者
string *a = null 初始化字串指標
string a = " " 初始化字串
6樓:吳鐵騎
你定義型別就自動初始化了
為什麼stl c++ string 中沒有format方法
c++中如何用string實現cstring格式化的功能
7樓:千鋒教育
也就是實現類似下面的功能: 1cstring str; 2double d = 10.24; 3str.
format("d=%.2f",10.24); 其實用c++標準庫來實現也比較簡單,**如下:
#include 24"的string型別的字串。 c++中字串的格式化輸出問題!請高手指教!!! 8樓:匿名使用者 #include setw(n)用法: 通俗地講就是預設寬度為了方便對齊只要將n值調整好即可, 參考如 cout< 9樓:劍起飛虹 用set(n)啊,不過前面要有#include的標頭檔案,此標頭檔案專門用於控制輸入輸出的。 set(n)設定欄位寬度為n位 不過還要設定成左對齊的方式。具體為: cout< #include using namespace std; int main() }return 0;} 10樓:匿名使用者 3.控制浮點數值顯示 使用setprecision(n)可控制輸出流顯示浮點數的數字個數。c++預設的流輸出數值有效位是6。 如果setprecision(n)與setiosflags(ios::fixed)合用,可以控制小數點右邊的數字個數。setiosflags(ios:: fixed)是用定點方式表示實數。 如果與setiosnags(ios::scientific)合用, 可以控制指數表示法的小數位數。setiosflags(ios::scientific)是用指數方式表示實數。 例如,下面的**分別用浮點、定點和指數方式表示一個實數: //********************* //** ch2_1.cpp ** //********************* #include #include //要用到格式控制符 void main() 執行結果為: 3.14286 3 33.1 3.14 3.143 3.14285714 3.14285714e+00 該程式在32位機器上執行通過。 在用浮點表示的輸出中,setprecision(n)表示有效位數。 第1行輸出數值之前沒有設定有效位數,所以用流的有效位數預設設定值6:第2個輸出設定了有效位數0,c++最小的有效位數為1,所以作為有效位數設定為1來看待:第3~6行輸出按設定的有效位數輸出。 在用定點表示的輸出中,setprecision(n)表示小數位數。 第7行輸出是與setiosflags(ios::fixed)合用。所以setprecision(8)設定的是小數點後面的位數,而非全部數字個數。 在用指數形式輸出時,setprecision(n)表示小數位數。 第8行輸出用setiosflags(ios::scientific)來表示指數表示的輸出形式。其有效位數沿用上次的設定值8。 小數位數截短顯示時,進行4舍5入處理。 4.設定值的輸出寬度 除了使用空格來強行控制輸出間隔外,還可以用setw(n)控制符。如果一個值需要比setw(n)確定的字元數更多的字元,則該值將使用它所需要的所有字元。例如: float amount=3.14159; cout < 其執行結果為:3.14159。它並不按4位寬度,而是按實際寬度輸出。 如果一個值的字元數比setw(n)確定的字元個數更少,則在數字字元前顯示空白,不同於其他控制符,setw(n)僅僅影響下一個數值輸出,換句話說,使用setw設定的間隔方式並不保留其效力。例如: cout< <<10 <<20< 執行結果為: -------1020 執行結果中的下橫線表示空格。整數20並沒有按寬度8輸出。setw()的預設值為寬度0,即setw(0),意思是按輸出數值的表示寬度輸出, 所以20就緊挨10了。 c++格式化字串問題
5 11樓:閃亮登場 1 sprintf,snprintf,vsnprintf家族 這幾個函式大家都不陌生,平時用的也比較多。下面我就它的優點簡單的做一個總結: · 易用性與清晰性: 使用snprintf的常用格式化標誌及其他們的各種組合,使用就變得簡潔明瞭,沒有任何拐彎抹角之處。 · 效率最佳: 能夠直接利用現有的緩衝區,當然你的程式可能根本就不會在乎這點效率的優化。永遠不要過早進行優化。 這個家族的函式最致命的缺陷在於長度安全性。 sprintf是引起緩衝區溢位錯誤的原因之一。snprintf和vsnprintf稍微好些,但也會引起其他的問題。sprintf已經無可救藥了,不提也罷,這個儘量少用。 snprintf和vsnprintf雖然是對長度是安全的,但對於過長的字串,他也暴露了很多他的無奈。 看個例子: void cstring::format(lpctstr lpszformat,...) allocated += result; line = (char*)realloc(line,allocated); }va_end(ap); if (line) else if (pfree) }這個函式封裝了vsnprintf,使其可以對任意長度的字串都可以格式化。但仔細分析這個函式,其實他不能對任意長度的字串進行格式化,只能最多格式化2048個字元,即while迴圈只能執行一次,原因在於:vsnprintf只能執行一次,根據man手冊中vsnprintf的解釋,在執行vsnprintf之後,ap的值是未定義的,因此,在while執行第二次的時候,誰知道會發生什麼事情那。 因此,對於不能確定其長度的字串,而這個字串的長度而有可能變的很大的時候,儘量不要用這個封裝的format函式,要自己來控制字串的長度,自己來分配空間,自己呼叫snprintf函式。 這個家族函式的另一個確定是:不是型別安全的。 比如對於int i來說,snprintf(buf,sizeof(buf),"%4c",i)輸出的是字元而不是整數,其實把整數當做字元也沒有什麼錯,這個問題也不嚴重,但是如果一不小心寫成snprintf(buf,sizeof(buf),"%4s",i),這個問題就大發了,程式可能會立即崩潰或至少偶發性的崩潰。這個只是個簡單的例子,其他也有類似問題需要注意。 2 std::stringstream c++中字串化最常見的設施就是stringstream了。 一個簡單的例子: void format(int i,string& s) 看一下stringstream的特點: 易用性和簡單性: 這個顯然和snprintf比起來要差一點了,一行可以完成的,現在變成了3行完成。並且不易於學習,你要學習諸如setw類似的函式來控制格式。 效率:stringstream會自己分配一份單獨的緩衝區來存放結果,另外還需要一個輔助性的物件,通常所有這些都意味著需要進行額外的記憶體分配。 長度安全性: stringstream內部的basic_stringbuf緩衝類會根據需要自動增長,以便容納需要存放的資料,因此是長度安全的。 型別安全性: 使用operator《和過載決議,即便是對於那些提供了自己的流插入操作的自定義流型別,也總能夠實現型別安全,不會因為型別不符而導致一些神祕的執行時錯誤。 3 std::strstream strstream是要被遺棄的,在c++03標準將它表明為deprecate(不贊成的),因此很多c++書籍頂多也只是略微提及一下。 void format(int i,char* buf,int buflen) 易用性和清晰性: lexical_cast的**最為直接地表達了實際的意圖。 效率:lexical_cast是stringstream類的一個包裝,因此它至少需要和stringstream一樣的記憶體分配次數。 在長度安全性,型別安全性方面,它和stringstream有一樣的表現。 string str 123456789 if str.length 5 使用substr一定要判斷否則程式會越界!用字元指標 指向該字串 此時指標指向字串的首地址,然後利用指標的移動取字串中的字元 include include using namespace std int main 可以將st... 考慮用貪婪正規表示式 從頭開始解析 0 9 abc xyz public class test930 執行結果 第一個 12,第二個 null,第三個 null,第四個 第一個 13,第二個 null,第三個 null,第四個 第一個 ax,第二個 a,第三個 x,第四個 第一個 by,第二個 b,... include int main scanf s a for i 0 a i 0 i for j 0 j 5 j 修改 1 下標從0 4,共5個 return 0 每行結尾的 僅僅是為了連線字串使用的,如果一個字串過長,寫在一行比較不合適,就在該行結尾處加上一個反斜槓 就可以在下邊的行繼續寫這個字串...在c 語言中定義一string型別的字串如何取字串
Java問題 字串String,有字元 數字和特殊字元,怎樣從中提出字元判斷是否為數字或字元
c語言字串陣列的問題C語言字串陣列的問題