getchar()函數(shù)的原型是 int getchar( void )
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的曲松網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
返回值是整型的
功能是:從標(biāo)準(zhǔn)輸入中讀取一個(gè)字符,也就是鍵盤(pán)敲擊字符,只接收單個(gè)字符
可以用gets()函數(shù)來(lái)接收多個(gè)字符
這里的 s 接收的是該字符的ASCII碼,非長(zhǎng)度。
如果從原基礎(chǔ)上改可以這樣
int i;
char s[20]; /*字符串需要長(zhǎng)度*/
gets( s );
i = num( s );
int num( char *s ) /* 這里的指針 ,后面學(xué)得到*/
{
}
套上去就可以了
#include?stdio.h
int?main(void)
{
long?long?x;
int?t,i,a;
char?c;
for(scanf("%d%lld\n",t,x),i=1;i=t;i++)
{
while((c=getchar())!='\n'c!=EOF)
{
scanf("%d",a);
switch(c)
{
case?'+':x+=a;break;
case?'-':x-=a;break;
case?'*':x*=a;break;
case?'/':x/=a;break;
default:break;
}
}
printf("Case?#%d:%lld\n",i,x);
}
return?0;
}
這是一種利用了棧技術(shù)的逆波蘭算法,算法思想本身不難,難是難在下面這兩點(diǎn):
數(shù)據(jù)互換,比如char 與double、int互換.或 double、int與string互換等(它們互換都很繁瑣).
提取數(shù)字含雙精度類(lèi)型(尤其是表達(dá)式里提取雙精度數(shù)據(jù)類(lèi)型是比較繁瑣的)。當(dāng)然也可只提取正整數(shù)(若是含有小數(shù)則不處理該表達(dá)式)。
下面是我寫(xiě)的一個(gè)逆波蘭算法,由于代碼較多發(fā)不上來(lái)(百度限制了提交),多達(dá)500行代碼左右。如果你有興趣想拿去研究的話(huà),可以發(fā)給你。主要是用C\C++混合編寫(xiě)。
當(dāng)然,如果你是使用C#編程語(yǔ)言的話(huà),那么你將不會(huì)面對(duì)上述的繁瑣問(wèn)題,因?yàn)镃#有強(qiáng)制型的數(shù)據(jù)轉(zhuǎn)換功能。
下面是運(yùn)行效果截圖以及主函數(shù)的部分調(diào)用代碼:
逆波蘭算法主要是分為兩步:
第一步:中綴表達(dá)式轉(zhuǎn)為后綴表達(dá)式
第二步:對(duì)后綴表達(dá)式進(jìn)行計(jì)算。
下面對(duì)算法原理進(jìn)行逐一討論:
逆波蘭算法中的中綴轉(zhuǎn)后綴的算法原理是這樣的:
第一種情況:由表達(dá)式左邊開(kāi)始往右遍歷,如果是數(shù)字則輸出拼到后綴表達(dá)式里(出棧的元素也是一 樣)。
第二種情況:如果是+-*/四則運(yùn)算則判斷棧頂元素的運(yùn)算符是否大于當(dāng)前的符號(hào).(乘除優(yōu)先于加減),
? 模擬:如果當(dāng)前元素是+(或-),而棧頂元素是*(或除),那么,此時(shí)棧頂元素依此出棧直至棧頂元素 的優(yōu)先級(jí)不大于當(dāng)前元素。然后當(dāng)前元素進(jìn)棧。
第三種情況:如果當(dāng)前元素是左括號(hào)"(",則進(jìn)棧。--因?yàn)樗c右括號(hào)匹配。
第四種情況:如果當(dāng)前元素是右括號(hào)")"則棧頂元素依此出棧,直至與它匹配的左括號(hào)"("出棧為止。
對(duì)后綴表達(dá)式進(jìn)行計(jì)算原理是這樣的:
對(duì)后綴表達(dá)式由左往右方向進(jìn)行掃描,遇到數(shù)字則進(jìn)棧,遇到運(yùn)算符號(hào)則在棧里依此出棧兩組數(shù)字進(jìn)行計(jì)算,計(jì)算結(jié)果依然進(jìn)棧,反復(fù)此操作。最后棧底部最后一個(gè)元素就是該表達(dá)式的運(yùn)算結(jié)果。
#include stdio.h
int mylength(char s[])
{
int i;
for(i=0;s[i]!='\0';i++);
return i;
}
void main()
{
char *s="awedfgwttfwdy66t6t63ttdsf";
printf("Length: %d\n",mylength(s));
}
思路:因?yàn)樽址际且?\0'作為結(jié)束標(biāo)志,所以可以從字符串的第一個(gè)位置開(kāi)始遍歷,直到出現(xiàn)'\0'停止遍歷,并每次下標(biāo)后移,字符串的長(zhǎng)度加1,最后返回字符串長(zhǎng)度。
參考代碼:
#include?"stdio.h"?
int?strlen(char?*s){//求字符串長(zhǎng)度函數(shù)?
int?n;
for(n=0;s[n]!='\0';n++);
return?n;
}?
int?main()?{
char?a[100];
gets(a);?
printf("%d\n",strlen(a));
return?0;
}
/*
運(yùn)行結(jié)果:
wqerqew
7?
*/