小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MFC中CString.Format的詳細(xì)用法

 冰晨之心 2012-09-15
MFC程序中,使用CString來(lái)處理字符串是一個(gè)很不錯(cuò)的選擇。CString既可以處理Unicode標(biāo)準(zhǔn)的字符串,也可以處理ANSI標(biāo)準(zhǔn) 的字符串。CString的Format方法給我們進(jìn)行字符串的轉(zhuǎn)換帶來(lái)了很大的方便,比如常見(jiàn)的int、float和double這些數(shù)字類(lèi)型轉(zhuǎn)換為 CString字符串只需一行代碼就可以實(shí)現(xiàn)。

  先看看Format用于轉(zhuǎn)換的格式字符:

  %c                 單個(gè)字符

  %d                 十進(jìn)制整數(shù)(int)

  %ld                十進(jìn)制整數(shù)(long)

  %f                 十進(jìn)制浮點(diǎn)數(shù)(float)

  %lf                十進(jìn)制浮點(diǎn)數(shù)(double)

  %o                 八進(jìn)制數(shù)

  %s                 字符串

  %u                 無(wú)符號(hào)十進(jìn)制數(shù)

  %x                 十六進(jìn)制數(shù)

  1、int轉(zhuǎn)換為CString:

  CString str;

  int number=15;

  //str="15"

  str.Format(_T("%d"),number);

  //str=" 15"(前面有兩個(gè)空格;4表示將占用4位,如果數(shù)字超過(guò)4位將輸出所有數(shù)字,不會(huì)截?cái)?

  str.Format(_T("%4d"),number);

  //str="0015"(.4表示將占用4位,如果數(shù)字超過(guò)4位將輸出所有數(shù)字,不會(huì)截?cái)?

  str.Format(_T("%.4d"),number);

  long轉(zhuǎn)換為CString的方法與上面相似,只需要把%d改為%ld就可以了。

  2、double轉(zhuǎn)換為CString:

  CString str;

  double num=1.46;

  //str="1.46"

  str.Format(_T("%lf"),num);

  //str="1.5"(.1表示小數(shù)點(diǎn)后留1位,小數(shù)點(diǎn)后超過(guò)1位則四舍五入)

  str.Format(_T("%.1lf"),num);

  //str="1.4600"

  str.Format(_T("%.4f"),num);

  //str=" 1.4600"(前面有1個(gè)空格)

  str.Format(_T("%7.4f"),num);

  float轉(zhuǎn)換為CString的方法也同上面相似,將lf%改為f%就可以了。

  3、將十進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制:

  CString str;

  int num=255;

  //str="377"

  str.Format(_T("%o"),num);

  //str="00000377"

  str.Format(_T("%.8o"),num);

 

 

 

 

 

 

Format是一個(gè)很常用,卻又似乎很煩的方法,以下是它的完整概貌,以供大家查詢之用:  

格式化字符串forma("%d",12)意思是將一個(gè)整形的格式化的字符(我認(rèn)為是保持其形狀不變
1).
格式說(shuō)明總是以%字符開(kāi)始,以下是不同類(lèi)型數(shù)據(jù)的格式方式%號(hào)后的說(shuō)明
d
輸出帶符號(hào)十進(jìn)制數(shù) 
o
輸出無(wú)符號(hào)八進(jìn)制數(shù) 
x
輸出無(wú)符號(hào)十六進(jìn)制數(shù) 
u
輸出無(wú)符號(hào)數(shù) 
c
輸出單個(gè)字符 
s
輸出一串字符 
f
輸出實(shí)數(shù)(6位小數(shù)) 
e
以指數(shù)形式輸出實(shí)數(shù) 
g
選用fe格式中輸出寬度較小的格式,不輸出
ld
輸入輸出long型數(shù)據(jù) 
lf
輸入輸出double型數(shù)據(jù) 
m
數(shù)據(jù)輸出寬度為
.n
輸出小數(shù)位數(shù)為


一、字符串 

首先看它的聲明:  
function Format(const Format: string; const Args: array of const): string; overload;  
事實(shí)上Format方法有兩個(gè)種形式,另外一種是三個(gè)參數(shù)的,主要區(qū)別在于它是線程安全的,  
但并不多用,所以這里只對(duì)第一個(gè)介紹:  

function Format(const Format: string; const Args: array of const): string; overload;  
Format
參數(shù)是一個(gè)格式字符串,用于格式化Args里面的值的。Args又是什么呢,  
它是一個(gè)變體數(shù)組,即它里面可以有多個(gè)參數(shù),而且每個(gè)參數(shù)可以不同。  
如以下例子:  
Format("my name is %6s","wind");  
返回后就是  
my name is wind  

現(xiàn)在來(lái)看Format參數(shù)的詳細(xì)情況:  
Format
里面可以寫(xiě)普通的字符串,比如"my name is"  
但有些格式指令字符具有特殊意義,比如"%6s"  

格式指令具有以下的形式:  
"%" [index ":"] ["-"] [width] ["." prec] type  
它是以"%"開(kāi)始,而以type結(jié)束,type表示一個(gè)具體的類(lèi)型。中間是用來(lái)  
格式化type類(lèi)型的指令字符,是可選的。  

先來(lái)看看type,type可以是以下字符:  
十制數(shù),表示一個(gè)整型值  
d一樣是整型值,但它是無(wú)符號(hào)的,而如果它對(duì)應(yīng)的值是負(fù)的,則返回時(shí)  
是一個(gè)232次方減去這個(gè)絕對(duì)值的數(shù)  
如:Format("this is %u",-2);  
返回的是:this is 4294967294  
對(duì)應(yīng)浮點(diǎn)數(shù)  
科學(xué)表示法,對(duì)應(yīng)整型數(shù)和浮點(diǎn)數(shù),  
比如Format("this is %e",-2.22);  
返回的是:this is -2.220000E+000  
等一下再說(shuō)明如果將數(shù)的精度縮小  
這個(gè)只能對(duì)應(yīng)浮點(diǎn)型,且它會(huì)將值中多余的數(shù)去掉  
比如Format("this is %g",02.200);  
返回的是:this is 2.2  
只能對(duì)應(yīng)浮點(diǎn)型,將值轉(zhuǎn)化為號(hào)碼的形式??匆粋€(gè)例子就明白了  
Format("this is %n",4552.2176);  
返回的是this is 4,552.22  
注意有兩點(diǎn),一是只表示到小數(shù)后兩位,等一下說(shuō)怎么消除這種情況  
二是,即使小數(shù)沒(méi)有被截?cái)?,它也不?huì)也像整數(shù)部分一樣有逗號(hào)來(lái)分開(kāi)的  
錢(qián)幣類(lèi)型,但關(guān)于貨幣類(lèi)型有更好的格式化方法,這里只是簡(jiǎn)單的格式化  
另外它只對(duì)應(yīng)于浮點(diǎn)值  
Format("this is %m",9552.21);  
返回:this is 9,552.21  
對(duì)應(yīng)于指針類(lèi)型,返回的值是指針的地址,以十六進(jìn)制的形式來(lái)表示  
例如:  
Format("this is %p",p);  
Edit1
的內(nèi)容是:this is 0012F548  
對(duì)應(yīng)字符串類(lèi)型,不用多說(shuō)了吧  
必須是一個(gè)整形值,以十六進(jìn)制的形式返回  
Format("this is %X",15);  
返回是:this is F  

類(lèi)型講述完畢,下面介紹格式化Type的指令:  
[index ":"] 
這個(gè)要怎么表達(dá)呢,看一個(gè)例子  
Format("this is %d %d",12,13);  
其中第一個(gè)%d的索引是0,第二個(gè)%d1,所以字符顯示的時(shí)候  
是這樣 this is 12 13  

而如果你這樣定義:  
Format("this is %1:d %0:d",12,13);  
那么返回的字符串就變成了  
this is 13 12  
現(xiàn)在明白了嗎,[index ":"] 中的index指示Args中參數(shù)顯示的  
順序  

還有一種情況,如果這樣Format("%d %d %d %0:d %d", 1, 2, 3, 4) ; 
將返回1 2 3 1 2。  
如果你想返回的是1 2 3 1 4,必須這樣定:  
Format("%d %d %d %0:d %3:d", 1, 2, 3, 4) ; 
但用的時(shí)候要注意,索引不能超出Args中的個(gè)數(shù),不然會(huì)引起異常  
Format("this is %2:d %0:d",12,13);  //error
由于Args中只有12 13 兩個(gè)數(shù),所以Index只能是01,這里為2就錯(cuò)了  
[width] 
指定將被格式化的值占的寬度,看一個(gè)例子就明白了  
Format("this is %4d",12);  
輸出是:this is 12  
這個(gè)是比較容易,不過(guò)如果Width的值小于參數(shù)的長(zhǎng)度,則沒(méi)有效果。  
如:Format("this is %1d",12);  
輸出是:this is 12  
["-"] 
這個(gè)指定參數(shù)向左齊,和[width]合在一起最可以看到效果:  
Format("this is %-4d,yes",12);  
輸出是:this is 12 ,yes  

["." prec] 
指定精度,對(duì)于浮點(diǎn)數(shù)效果最佳:  
Format('this is %.2f',['1.1234]);  
輸出 this is 1.12  
Format('this is %.7f',['1.1234]);  
輸了 this is 1.1234000  

而對(duì)于整型數(shù),如果prec比如整型的位數(shù)小,則沒(méi)有效果  
反之比整形值的位數(shù)大,則會(huì)在整型值的前面以0補(bǔ)之  
Format('this is %.7d',[1234]);  
輸出是:this is 0001234]  

對(duì)于字符型,剛好和整型值相反,如果prec比字符串型的長(zhǎng)度大  
則沒(méi)有效果,反之比字符串型的長(zhǎng)度小,則會(huì)截?cái)辔膊康淖址?/span>  
Format('this is %.2s',['1234']);  
輸出是 this is 12  

而上面說(shuō)的這個(gè)例子:  
Format('this is %e',[-2.22]);  
返回的是:this is -2.22000000000000E+000  
怎么去掉多余的0呢,這個(gè)就行啦  
Format('this is %.2e',[-2.22]);  

好了,第一個(gè)總算講完了,應(yīng)該對(duì)他的應(yīng)用很熟悉了吧  

m_result.Format("
您選的城市是:/r/n %s,/r/n您選的人是:/r/n%s",city1 +  city2 +  city3,people); 
  UpdateData(0);

格式小結(jié): 
1)最常用的格式是%d,含義是以10進(jìn)制形式打印一個(gè)整數(shù)。 
如果輸出的整數(shù)是負(fù)數(shù),則,輸出的第一個(gè)字符就是‘-’號(hào) 
2%u格式與%d格式類(lèi)似,只不過(guò)要求打印無(wú)符號(hào)10進(jìn)制整數(shù)。 
3%o格式請(qǐng)求輸出8進(jìn)制整數(shù) 
4%x%X格式請(qǐng)求輸出16進(jìn)制整數(shù)。 
%x
格式中用小寫(xiě)字母a,b,c,d,e,f來(lái)表示1015之間的數(shù) 
%X
格式中用大寫(xiě)字母A,B,C,D,E,F來(lái)表示1015之間的數(shù) 
共同點(diǎn):8進(jìn)制和16進(jìn)制整數(shù)總是作為無(wú)符號(hào)數(shù)處理的。 
5%s格式用于打印字符串,與之對(duì)應(yīng)的參數(shù)應(yīng)該是一個(gè)字符指針,待輸出的字符始于該指針?biāo)赶虻牡刂?,直到出現(xiàn)一個(gè)空字符('/0' 
才終止。 
6%c格式用于打印單個(gè)字符:例如: 
printf("%c",c); 
等價(jià)于 putchar?; 
7%g,%f%e這三個(gè)格式用于打印浮點(diǎn)值。 
%g
格式用于打印那些不需要按列對(duì)齊的浮點(diǎn)數(shù)特別有用。其作用有二: 
一,去掉該數(shù)尾多余的零(沒(méi)有達(dá)到六位的數(shù)) 
二,保留六位有效數(shù)字(多余六位的) 
%e
格式用于打印浮點(diǎn)數(shù)時(shí),一律顯示地使用指數(shù)形式:例如:輸出圓周率時(shí)是:3.141593e+00 
兩者的區(qū)別: 
%g
格式打印出的數(shù)是總共6位有效數(shù)字 
%e
格式打印出小數(shù)點(diǎn)后的6位有效數(shù)字 
%f
禁止使用指數(shù)形式來(lái)表示浮點(diǎn)數(shù)。因此圓周率輸出為:3.141593 
(但注意它的精度要求:也是小數(shù)點(diǎn)后6位有效數(shù)字) 
8%%格式用于打印一個(gè)%字符。 
9%E%G只是在輸出時(shí)用大寫(xiě)字母(E)代替了小寫(xiě)字母(e) 
另外需要注意的一些知識(shí)點(diǎn)

*************************************** 
對(duì)齊規(guī)則: 
1)當(dāng)指定寬度大于要輸出位數(shù)時(shí),數(shù)右對(duì)齊,左端補(bǔ)空格 
當(dāng)前綴'-'號(hào)時(shí),想要數(shù)左對(duì)齊,右端補(bǔ)空格 
大大的前提:只有當(dāng)指定寬度存在時(shí),前綴'-'才有意義。 
經(jīng)驗(yàn):一般來(lái)說(shuō),左端對(duì)齊的形式看上去要美觀整齊一點(diǎn)。 
*************************************** 
輸出正負(fù)號(hào)的技巧:(記?。├纾?/span> 
printf("%+d %+d %+d/n",-5,0,5); 
只要在中間加個(gè)“+”號(hào)就行。作用是輸出符號(hào)位(即,數(shù)的正負(fù)號(hào)) 
如果不希望正數(shù)的前面出現(xiàn)‘+’號(hào),可用下面的方法 

*************************************** 
只要在中間加個(gè)“ ”號(hào)(即:空格)就行。(記住)例如: 
作用:如果一個(gè)數(shù)是非負(fù)數(shù),就在它的前面插入一個(gè)空格。 
int i; 
for(i=-3;i<=3;i++) 
 printf("% d/n",i); //
注意%d之間有一個(gè)空格 
輸出結(jié)果如下: 
-3 
-2 
-1 




問(wèn)題:如果‘+’‘ ’同時(shí)出現(xiàn)在中間時(shí),要以‘+’為準(zhǔn)。 
兩個(gè)符號(hào)的共同點(diǎn):用于對(duì)齊輸出的數(shù):(尤其對(duì)于小數(shù)來(lái)說(shuō)) 
 
兩種格式:%+e% e 
C
語(yǔ)言中基本的輸入輸出函數(shù)有: 
putchar ():
把變量中的一個(gè)字符常量輸出到顯示器屏幕上
getchar ();
從鍵盤(pán)上輸入一個(gè)字符常量,此常量就是該函數(shù)的值
printf ();
把鍵盤(pán)中的各類(lèi)數(shù)據(jù),加以格式控制輸出到顯示器屏幕上
scanf ();
從鍵盤(pán)上輸入各類(lèi)數(shù)據(jù),并存放到程序變量中
puts ():
把數(shù)組變量中的一個(gè)字符串常量輸出到顯示器屏幕上
gets ():
從鍵盤(pán)上輸入一個(gè)字符串常量并放到程序的數(shù)組中
sscanf(); 
從一個(gè)字符串中提取各類(lèi)數(shù)據(jù)。 
 putchar() 
 getchar() 顧名思議就是從輸入流中獲取一個(gè)字符和輸出一個(gè)字符,比較簡(jiǎn)單,不再多講。 
例子如下: 
char c = getchar(); 
putchar?; 
 
格式化輸入輸出scanf()printf()是最有用的,所以重點(diǎn)講一下。 
printf(): 
一般形式
printf("
格式控制".輸出列表);  
eg : printf("a=%d,b=%f,c=%c/n",a,b,c); 
1;
格式控制
格式控制是用雙引號(hào)括起來(lái)的字符串,也稱"轉(zhuǎn)換控制字符串",它包含以下兩部分信息
格式說(shuō)明:由"%"和格式字符組成,%d,%f,%c,他的作用是把輸出數(shù)據(jù)轉(zhuǎn)換為指定格式輸出,格式的說(shuō)明總是由"%"字符開(kāi)始的.

普通字符:需要原樣輸出的字符,或者是一些有特殊含義的字符,如/n,/t。 
2;
輸出列表 
就是需要輸出的一些數(shù)據(jù),也可以是表達(dá)式,如果在函數(shù)中需要輸出多個(gè)變量或表達(dá)式,則要用逗號(hào)隔開(kāi)
 
一些特殊字符的輸出: 
單引號(hào),雙引號(hào),和反斜杠的輸出在前面加轉(zhuǎn)義字符”/” 
如:”/’” , “/”” , “//” 
%
的輸出用兩個(gè)連在一起的%%,即printf(“%%”); 

常用的格式說(shuō)明如下
格式字符 
以十進(jìn)制形式輸出帶符號(hào)整數(shù)(正數(shù)不輸出符號(hào))  
以八進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴O)  
以十六進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴OX)  
以十進(jìn)制形式輸出無(wú)符號(hào)整數(shù)  
以小數(shù)形式輸出單精度實(shí)數(shù)  
lf
以小數(shù)形式輸出雙精度實(shí)數(shù) 
以指數(shù)形式輸出單、雙精度實(shí)數(shù)  
%f%e中較短的輸出寬度輸出單、雙精度實(shí)數(shù)  
輸出單個(gè)字符  
輸出字符串  
 
這里強(qiáng)調(diào)一下:網(wǎng)上很多文章都說(shuō)lf是一樣的,即不管單精度,雙精度浮點(diǎn)數(shù),都可以用f, 但我在POJ上做過(guò)測(cè)試,輸出Double時(shí)用f確實(shí)也可以 ,但讀入時(shí),用f就報(bào)WA,所以大家如果對(duì)Double進(jìn)行讀寫(xiě)的話,都用lf吧。 
說(shuō)到Double,再啰嗦一句,建議大家要用到浮點(diǎn)數(shù)時(shí)都用Double,不要用float,因?yàn)樵诤芏嗲闆r下,float精度不夠會(huì)導(dǎo)致WA。 
特殊: 
對(duì)64位整數(shù)的輸入輸出,在POJ上的C++環(huán)境下(VC),64位整數(shù)是: 
__int64 
(注意int前面是兩個(gè)下劃線) 
輸入輸出格式為”%I64d”. 
G++環(huán)境下(Dev C++) 64位整數(shù)是 
long long 
輸入輸出格式為”%lld”. 

輸出寬度 
  用十進(jìn)制整數(shù)來(lái)表示輸出的最少位數(shù)。 注意若實(shí)際位數(shù)多于定義的寬度,則按實(shí)際位數(shù)輸出, 若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0。 
精度 
  精度格式符以“.”開(kāi)頭,后跟十進(jìn)制整數(shù)。意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù);如果輸出的是字符, 則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的精度數(shù),則截去超過(guò)的部分。 
標(biāo)志格式字符  
結(jié)果左對(duì)齊,右邊填空格  
輸出符號(hào)(正號(hào)或負(fù)號(hào))空格輸出值為正時(shí)冠以空格,為負(fù)時(shí)冠以負(fù)號(hào) 
例如: 
double c=24212345.24232; 
printf(“%020.4”); 
表示輸出精確到小數(shù)點(diǎn)后4位,輸出占20位,若有空余的位補(bǔ)0. 
 scanf
 
scanf
的很多用法都是和printf對(duì)應(yīng)的,故不再贅述。 
說(shuō)一下scanf一個(gè)特別好用的地方,就是可以濾去一些不想要的東西。 
舉例說(shuō)明如下: 
比如輸入為日期 yyyy-mm-dd,就可以這樣寫(xiě): 
int year,moth,day; 
scanf(“%d-%d-%d”,&year,&moth,&day); 
再比如: 
scanf("%3d %*3d %2d",&m,&n); 
輸入113 118 69回車(chē)(系統(tǒng)將113賦予m,69賦予n,因?yàn)?/span>*號(hào)表示跳過(guò)它相應(yīng)的數(shù)據(jù)所以118不賦予任何變量
puts()
用的不多,且基本都能用printf()代替,故不再多說(shuō)。 
gets()
是從輸入流中獲取一行字符串放入字符數(shù)組中
char in[100]; 
gets(in); 
大家可能最容易出錯(cuò)的地方就是字符串的輸入,所以強(qiáng)調(diào)一下: 
能進(jìn)行字符,字符串輸入的有: 
getchar(), scanf(“%c”); scanf(“%s”), gets() 
其中getchar()  scanf(“%c”)的功能是一樣的。 
需要注意的是,這兩個(gè)函數(shù)讀入的是輸入流中當(dāng)前位置的字符, 
比如: 
 scanf(“%d”,&n); 
 c = getchar(); 
假設(shè)輸入 67/ (假設(shè)“/”代表回車(chē)),則第一個(gè)scanf讀入一個(gè)整數(shù)67后,當(dāng)前輸入流的位置是67之后,即指向回車(chē)符,所以第二個(gè)getchar()讀入的就是一個(gè)回車(chē)符了,即 c = ‘/n’。 
同樣,gets()也是從當(dāng)前位置讀入一行字符串。 
比如: 
scanf(“%d”,&n); 
gets(str); 
此時(shí)讀入字符數(shù)組中的字符串就是“/n”  
所以通常在用scanf讀入一個(gè)非字符串的類(lèi)型之后,如果要讀入字符,或字符數(shù)組,都用一個(gè)額外的getchar()把回車(chē)符讀掉,若后面跟的不止一個(gè)回車(chē)符,可能還有多余的空格的話,就用gets()讀掉。 
 
和以上不同的是,scanf(“%s”) 讀入的時(shí)候是會(huì)忽略掉空格,回車(chē)和制表符的。并且以空格,回車(chē)和制表符作為字符串結(jié)束的標(biāo)志。 
 
經(jīng)常會(huì)有這樣的題,輸入第一行是一個(gè)整數(shù),接下來(lái)每行的第一個(gè)是一個(gè)字符,用來(lái)表示某種操作,后面再跟一些數(shù)據(jù),比如: 

A 100 2 
B 23 
A 23 89 
B 34 
像這種輸入就需要小心,讀入字符時(shí)不要讀成回車(chē)符。 
為了防止意外,我一般是這樣處理這類(lèi)輸入的: 
char model[2]; 
Scanf(“%d”,&n); 
for(…,…,…){ 
 scanf(“%s”,model); 
 if(model[0] == ‘A’){ 

else{ 


 sscanf(): 
sscanf()
經(jīng)常用來(lái)分解字符串,功能非常強(qiáng)大,但很多功能都需要正則表達(dá)式的知識(shí),所以就介紹一下最簡(jiǎn)單的幾種用法,大家如果想了解更多的話,自己去網(wǎng)上找吧。 
1. 
char str[100],str1[100],str2[100]; 
gets(str); 
sscanf(str,”%s%s”,str1,str2); 
將讀入的一整行字符串按空格,制表符或回車(chē)符分割成兩個(gè)字符串。 

取指定長(zhǎng)度的字符串。如在下例中,取最大長(zhǎng)度為4字節(jié)的字符串。 
  sscanf("123456 ", "%4s", str);

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多