「printf」與「sprintf」的使用方法區別

2021-05-10 14:06:30 字數 2707 閱讀 7306

「printf」與「sprintf」的使用方法區別

printf方法與sprintf方法

字串類是沒有方法的。所以,我們在這裡介紹printf方法和sprintf方法。

printf方法

使用printf方法,可以將字串按既定的格式進行輸出。使用printf方法,例如數字輸出的場合,可以在數字的前頭加上"0";小數的場合,可以指定輸出小數的行數,如下例:

1: n=123

2: printf("%d/n", n)

3: printf("%4d/n", n)

4: printf("%04d/n", n)

5: printf("%+4d/n", n)

執行結果:

123

1230123

+123

printf方法的第乙個引數,用來指定傳入資料以何種格式進行輸出。故而,當有2個以上的引數時,在格式指定中,"%"位置的右邊,依次指定即可。

在上面的例子裡,第2行中的printf方法,使用了"%d",它是針對整數輸出而設定的專用符號。

在"%"和"d"之間,可以增加符號來進行更多的格式指定。例如,第3行的printf方法裡,我們使用了"4",它的意思是"整數以4位格式進行輸出",執行的結果就是在"123"前面追加了一位空白。3位數要求以4位數格式輸出時,會在字頭先輸出1位空白。

第4行中,在"%"和"d"之間,使用了"04"來指定格式,因而,整數的行頭指定數以0開始,對於位數未滿的部分,在字頭的前面新增"0"。

在第5行中,使用了"+"來指定輸出格式。具體的意思是,輸出時必須輸出表示數字正負性的(+、-)符號。

以上是有關數字輸出格式指定的方法,對於字串來說,我們也可同樣指定其輸出格式。

1: n="ruby"

2: printf("hello,%s!/n", n)

3: printf("hello,%8s!/n", n)

4: printf("hello,%-8s!/n", n)

執行結果:

hello,ruby!

hello,   ruby!

hello,ruby   !

該例子中,我們用"%s"來指定輸出格式,它的意思是將引數以字串格式進行輸出。在引數n中,存入了"ruby",因此輸出後的字串就是"hello,ruby!"。

在第3行中,在"%"和"s"之間,使用了"8"來指定格式,基於該指定格式,"ruby"的字串以8行的格式進行輸出(注:向右靠齊方式)。

在第4行中,我們使用了"-8",其意義為:"字串靠左對齊的方式以8行格式輸出"。

sprintf方法

printf是進行畫面輸出的方法,起到同樣效果但輸出結果是字串物件的方法是sprintf。sprintf的"s"我們可以看作是"string"的"s",這樣就記住了該方法的意義。

sprintf常常用於那些使用字串類方法來處理生成不規則的字串的場合。

12.2 獲取字串長度

要獲取字串的長度,可以使用length方法或size方法。兩者的結果都一樣,可以選擇自己喜歡的用。

p "just another ruby hacher,".length    #=> 25

p "just another ruby hacher,".size      #=> 25

不過,這些方法對字串為中文或日文就不太管用了。

p '物件導向程式設計語言'.length     #=> 16

使用正規表示式,可以正確地獲取中文或日文字串的字數。例如,當字元是shift_jis編碼時,使用下一節將要介紹的split方法像下面這樣分割,就能得到正確的長度。

p 'オブジェクト指向プログラミング言語'.split(//s).length  #=> 17

當字串是utf-8編碼的時候,則可以這樣寫:

p '物件導向程式設計語言'.split(//u).length     #=> 8

雖然說ruby算是處理日文比較方便的語言,但一知半解地使用,仍然會陷入很多想不到的陷阱中,請多加注意。

ruby的中文支援

ruby是日本人發明的程式語言,所以對日文考慮多一點。然而很遺憾的是,ruby語言並未正式支援中文(在此指正體中文的big5碼)。

若程式是以big5碼編寫的,可能並沒有簡單的完美的解決方式。因為big5碼與日文euc-jp編碼的碼位較為類似,例如,想以p方法檢視變數內容的時候,使用引數-ke將big5當做euc-jp處理,確實能顯示正確的文字,算是乙個變通的處理的方式。同理,似乎也可以應用在字串長度上:

p '物件導向程式設計語言'.split(//e).length     #=> 8

但這只是簡單測試的結果,我們並無法保證對所有中文字都能正常執行。譯者的建議還是盡可能使用utf-8編碼來處理中文。

ruby語言的原作者松本先生表示,未來1.9版的ruby將加強對多種語言的處理能力,就讓我們共同期待吧!

另外,還有empty?方法可以用來檢查字串長度是不是0。此方法經常用在迴圈裡檢查字串是不是空的。

p "".empty?       #=> true

p "foo".empty?    #=> false

sscanf與sprintf的用法詳解

事實上,常見的scanf和printf寫法其實都可以寫作 scanf screen,d n printf screen,d n scanf實際上就是從左到右將screen中的內容按照 d的格式讀到n裡面 相同的方法,printf實際上就是按照 d的形式,把n中的資料輸出到screen 前面加上 s ...

scanf與printf的強大

習慣了用c 常常會忽略了scanf和printf在某些題的巧妙或是便捷之處。1.scanf 很多題目要求的輸入,一般是整數 字串或陣列,一般用cin就可以 但當我們輸入乙個字串,有時我們可以根據題目要求,將字串既輸入數字又輸如字元甚至其他固定符號比如正負號小數點時,我們可以用scanf輸入。例如pa...

scanf與printf的格式

scanf的格式 1.scanf 輸入控制符 輸入引數 2.scanf 輸入控制符非輸入控制符 輸入引數 scanf的功能 將從鍵盤輸入的字元轉化為 輸入控制符 所規定格式的資料,然後存入以輸入引數的值為位址的變數中。scanf d i 其中 是乙個取位址運算子,後面加變數名表示 該變數的位址 所以...