C語(yǔ)言字符串另類用法的實(shí)現(xiàn)
講這個(gè)例子前,咱們先來(lái)看一個(gè)簡(jiǎn)單的程序:
字符串?dāng)?shù)組實(shí)現(xiàn)數(shù)字轉(zhuǎn)字母:
#include <stdio.h>
#include <string.h>
int main(void)
{
int num = 15 ;
//26個(gè)字母
const char str[] = "abcdefghijklmnopqlstuvwxyz" ;
//這個(gè)做法是將num這個(gè)十進(jìn)制數(shù)通過(guò)取模轉(zhuǎn)換為字母并輸出,從程序看,即可知道是輸出p
char a = str[num%26] ;
printf("a=%c\n",a);
return 0 ;
}
當(dāng)然我們也可以這么寫,用指針的形式來(lái)表示:
#include <stdio.h>
#include <string.h>
int main(void)
{
int num = 15 ;
char *str = "abcdefghijklmnopqlstuvwxyz" ;
char a = str[num%26] ;
printf("a=%c\n",a);
return 0 ;
}
同樣的,結(jié)果也是和上面是一樣的,我們?cè)賹?duì)這種寫法進(jìn)行簡(jiǎn)化,如果初學(xué)者的基礎(chǔ)不扎實(shí),也許一看就懵了。
#include <stdio.h>
#include <string.h>
int main(void)
{
int num = 15 ;
//char *str = "abcdefghijklmnopqlstuvwxyz" ;
char a = "abcdefghijklmnopqlstuvwxyz"[num%26] ;
printf("a=%c\n",a);
return 0 ;
}
其實(shí)不用驚訝,這樣的寫法和前面兩種的意思是一樣的,只不過(guò)將str替換成了一串字符串。正是因?yàn)橛辛诉@種做法,所以在寫進(jìn)制轉(zhuǎn)換的時(shí)候,可以使用這樣的技巧來(lái)實(shí)現(xiàn),當(dāng)然,作為開(kāi)發(fā)者,寫出可讀性高的代碼來(lái)說(shuō),我并不推崇這樣的寫法。
既然可以向上面這么寫,那也就可以向下面這么寫,輸出的結(jié)果是4個(gè)3。
#include <stdio.h>
int main(void)
{
char *p = "0123456789abcdef" ;
putchar(p[3]);
//換行
putchar('\n');
putchar(*(p + 3));
putchar('\n');
putchar("0123456789abcdef"[3]);
putchar('\n');
putchar(*("0123456780abcdef"+3));
putchar('\n');
return 0 ;
}
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- 劍指offer之C語(yǔ)言不修改數(shù)組找出重復(fù)的數(shù)字
- C語(yǔ)言測(cè)試n的階乘和x的n次方
- C語(yǔ)言數(shù)組a和&a的區(qū)別講解
- C語(yǔ)言實(shí)現(xiàn)詞法分析器
- 使用Python向C語(yǔ)言的鏈接庫(kù)傳遞數(shù)組、結(jié)構(gòu)體、指針類型的數(shù)據(jù)
- C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)快速排序
- 如何寫出優(yōu)美的C語(yǔ)言代碼
- C語(yǔ)言用fstat函數(shù)獲取文件的大小方法
- C語(yǔ)言制作簡(jiǎn)易金山打字通功能的代碼
- 劍指offer之C++語(yǔ)言實(shí)現(xiàn)鏈表(兩種刪除節(jié)點(diǎn)方式)
相關(guān)文章
關(guān)于數(shù)組做函數(shù)參數(shù)的問(wèn)題集合匯總
本文是對(duì)關(guān)于數(shù)組做函數(shù)參數(shù)的問(wèn)題進(jìn)行了詳細(xì)的匯總,需要的朋友可以過(guò)來(lái)參考下。希望對(duì)大家有所幫助2013-10-10
C++哈希應(yīng)用之位圖,哈希切分與布隆過(guò)濾器詳解
這篇文章主要為大家詳細(xì)介紹了C++哈希應(yīng)用中的位圖、哈希切分與布隆過(guò)濾器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下2023-04-04
全局靜態(tài)存儲(chǔ)區(qū)、堆區(qū)和棧區(qū)深入剖析
在C++中,內(nèi)存可分為系統(tǒng)數(shù)據(jù)區(qū),自由存儲(chǔ)區(qū),文本區(qū),const數(shù)據(jù)區(qū),全局靜態(tài)區(qū),堆區(qū)和棧區(qū)2012-11-11
關(guān)于C/C++中的side effect(負(fù)效應(yīng))和sequence point(序列點(diǎn))
不知你在寫code時(shí)是否遇到這樣的問(wèn)題?int i = 3; int x = (++i) + (++i) + (++i); 問(wèn)x值為多少?進(jìn)行各種理論分析,并在編譯器上實(shí)踐,然而可能發(fā)現(xiàn)最終的結(jié)果是不正確的,也是不穩(wěn)定的,不同的編譯器可能會(huì)產(chǎn)生不同的結(jié)果。這讓人很頭疼2013-10-10

