精品久久看,欧美成人久久一级c片免费,日本加勒比在线精品视频,国产一区二区三区免费大片天美,国产成人精品999在线,97理论三级九七午夜在线观看

當前位置:首頁文章首頁 IT學院 IT技術(shù)

C#格式化英文字母的三種方法

作者:  來源:  發(fā)布時間:2011-12-9 11:04:45  點擊:

本人學習C#有很長一段時間了,總結(jié)了一下C#格式化英文字母主要有三種方法,下面就來簡單的介紹一下。

第一種方法:調(diào)用Char.ToUpper(),Char.ToLower()方法

第二種方法:api調(diào)用法:

string str = "BaSiC";

string strUpper = str.ToUpper();

string strLower = str.ToLower();

下面我來著重講一下第三種方法,這種方法看起來復雜一點,但執(zhí)行的效率還不錯。

第三種方法:使用for循環(huán)來判斷,如果是大寫就,如果是小寫就..

首先觀察大寫字母和小寫字母的異同:

image

打印上面的代碼如下,有興趣的可以自己試試打印這樣的表格出來:

Console.WriteLine("{0,-3} | {1,-6} | {2,-8} | {3,-3} | {4,-6} | {5,-8}",

"小寫", "ascil", "2進制", "大寫", "ascil", "2進制");

IEnumerable chars = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (char)i);

foreach (char c in chars)

{

char upperC = char.ToUpper(c);

Console.WriteLine("{0,-5} | {1,-6} | {2,-10} | {3,-5} | {4,-6} | {5,-10}",

c, (int)c, Convert.ToString(c, 2),

upperC, (int)upperC, Convert.ToString(upperC, 2));

}

從上面很容易看的出來’a’ 比大寫的’A’ 的ascil多32,從這點出發(fā)就可以得到下面的代碼:

private static char[] GetUpperChars(string str)

{

char[] chars = str.ToCharArray();

for (int i = 0; i < chars.Length; i++)

{

if (char.IsLower(chars[i]))

{

chars[i] = (char)(chars[i] - 32);

}

}

return chars;

}

這段代碼使用for循環(huán)并加入判斷,如果是小寫,則將其值減去32,調(diào)用也比較簡單:

string strUpper2 = new string(GetUpperChars(str));

這段代碼唯一的缺點是進行了IsLower的判斷,可不可以在沒有判斷的情況下來修改chars使其變成大寫呢?

如果從Ascii 的角度來解決這個問題,那么我們就必須使用大小寫的判斷,我在匯編語言的書上看到了這句話:

如果一個問題的解決方案,使我們陷入一種矛盾之中,那么很可能是我們考慮問題的出發(fā)點有了問題,或者說我們起初運用的規(guī)律并不適合。

這段話的意思是,可能我們應該從其他角度來觀察,而不應該從Ascii的角度來觀察。

如果不從Ascii的角度來觀察,那還能從哪里來觀察呢?

可以從2進制的角度來觀察。

image

還是這幅圖,只是我們的觀察角度變成了2進制。

a 的2進制:1100001, b的2進制1100010,..

A 的2進制: 1000001, B的2進制1000010,..

可以知道a的第5位是1,而A的第5位是0,(從右邊往左邊數(shù),0開始,后面得第幾位都這樣數(shù))

b的第5位是1,而B的第5位是0,

..

所以如果要將一個字符串變成大寫,只需要將字符串的所有字符的第5位全部變成1就可以了。

而如何將一個字符的第5位變成1呢?

答案是使用And(位運算)操作.

首先a 是個7位字符,只所以是7位,是因為在制定Ascii的時候位比較貴,8位比較浪費,而6位又不夠,所以ascii碼是7位的,這點從

a 是1100001 就可以看出了,總共7位。

它可以和0101-1111 或者是1101-1111,進行And

在C#中And 是&

所以你可能會將函數(shù)修改為:

for (int i = 0; i < chars.Length; i++)

{

chars[i] = (char)(chars[i] & 11011111);

}

先停一下,你認為上面的寫法正確嗎?

然后運行,結(jié)果卻發(fā)現(xiàn):

image

為什么?

這是因為C#中的& 默認操作的是十進制的數(shù)字,所以11011111,

就會變成一千一百零一萬一千一百一十一

所以要將2進制的11011111 變成10進制,如何轉(zhuǎn)變?

int value = Convert.ToInt32("11011111", 2);

value的值是223.所以代碼修改為:

for (int i = 0; i < chars.Length; i++)

{

chars[i] = (char)(chars[i] & 223);

}

運行可以得到正確的結(jié)果:

或者使用16進制來表示:1101-1111 ,的16進制是:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 1 2 3 4 5 6 7 8 9 A B C D E F

1101=2^3+2^2+1=8+4+1=13 = D

1111=2^3+2^2+2^1+2^0=8+4+2+1=15 = F

所以可以將上面的代碼修改為:

chars[i] = (char)(chars[i] & 0xdf);

同樣因為只是第5位不同,而第7位會被忽略。所以和 0101-1111進行and操作也可以得到正確的答案:

而0101-1111 的16進制是0x5f.所以代碼可以變成:

chars[i] = (char)(chars[i] & 0x5f);

相關(guān)軟件

文章評論

軟件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
主站蜘蛛池模板: 成人在线综合网 | 国产免费自拍视频 | 老阿姨露脸69式 | 日本加勒比网站 | 久久我们这里只有精品国产4 | 国内自拍欧美 | www五月天| 久久久96 | 夜夜操夜夜骑 | h小视频在线观看 | 久久亚洲综合 | 免费一级毛片在线播放 | 国产成人精品视频播放 | 精品福利一区二区三区免费视频 | 日产精品一区二区 | 久久久久久久国产精品视频 | 色视频免费在线观看 | 激情网网站 | 国产精品久久久久久久成人午夜 | 国产综合在线播放 | 毛片网站观看 | 欧美日韩国产手机在线观看视频 | 国产精品亚洲一区二区三区在线播放 | 一级精品视频 | 国产精品国产亚洲精品看不卡 | 国产成人精品电影 | 激情婷婷成人亚洲综合 | 亚洲六月婷婷 | 国产精品偷伦视频免费手机播放 | 久久网址 | 免费一区二区三区四区 | 欧美激情精品久久久久久久九九九 | 99精品欧美一区二区三区综合在线 | 日韩视频 中文字幕 | 黄色污污视频在线观看 | 伊人国产在线 | 成人影院一区二区三区 | 中文字幕不卡一区 | 国产成人app | 久久99久久99精品 | 久久久久久久国产精品电影 |