主题:新手问题
xin310923
[专家分:0] 发布于 2011-04-03 15:44:00
#include<iostream>
using namespace std;
int main()
{
char ch[]={"12yue25ri"};
int i,s=0;
for(i=o;ch[i]>='0'&&ch[i]<='9';i++)
s=10*s+ch[i]-'0';
cout<<s<<endl;
return 0;
}
怎么算出12的呢 求解
回复列表 (共2个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-04-03 16:06:00
先要看懂for循環的終止條件,它的終止條件是:
從字符數組首元素開始,當遇到不是數字的字符時終止。
其次看看循環體內是啥:
1、將取出來的字符-'0',這是啥意思?這就是將兩個字符的ASCII碼相減:)(看看ASCII碼表)
2、將第1步算出來的結果與s*10的值相加,并將結果給s;
由此我們分析:
已知:
s=0
i=0時:
ch[0]='1';
'1'-'0'=1;
s=s*10+'1'-'0'=0*10+1=1;
i=1時:
ch[1]='2';
'2'-'0'=2
s=s*10+'2'-'0'=1*10+2=12;
板凳
梦梦学编程 [专家分:10] 发布于 2011-04-04 15:38:00
因为ch[i]是char型的,直接输出的话会是对应得ASCII码值,所以必须ch[i]-'0',
得到的才是对应的整数值,比如:i=0时,ch[0]为char型'1',ASCII码值直接输出为49
,'0'的ASCII码值为48,ch[i]-'0'就得到为1,s=1;
同理,i=1时,ch[1]='2',满足条件,s=12,i=2时,ch[2]='y',不满足
ch[i]>='0'&&ch[i]<='9',此时i不进行i++;、退出循环
我来回复