#对1001的反省
阅读过网上其他人的solution之后自己的想法:
1.字符串输入之后先遍历,找出整数的个数,小数点的位置,和小数的个数。
2.去掉先导0和后导0。统计这之后的,整数个数,小数点位置和小数个数。
3.检测到小数点后,前置一位。化成没有小数点的“整数”形态。
4.将有效字符转化为整形数组
在编写代码时遇到了问题:判断逻辑出现了表达不正确的情况。现在首要的问题是“我怎么样才能整理清楚我的判断逻辑”。不是因为C语言的控制流不会,而是反映出在这里的控制流逻辑上我还没有完全搞清楚,是半知半解的,是不可靠的陈述性知识的积累,这是会出大问题的。现在最重要的是,再回过头认真分析这里的逻辑判断,找出真正清楚的内涵逻辑。
1.为什么遍历字符串?
为了找到整数的个数,小数位置和小数个数。
2.什么样的逻辑判断可以找到需要的结果?很明显“小数点”。从0开始如果不是小数点,就是整数,计数整数个数。遇到小数点,标记小数点位置。从字符串尾部开始像前面遍历,如果不是小数点计数小数个数,遇到小数点位置标记。(可以判断前后两次小数点位置标记是否一样,若一样无错)
3.while(str[i]!='.')//最开始是“。”一直在报错
4.为什么?
5.
6.预期效果是:
0 9
1 5
2 .
3 1
4 2
5 3
再去前导0时,可以把小数点位置作为参考系,从中间像两边计数00 ,01,,11
逻辑被绕进去了,想复杂了。==2又绕不出来了
假设是xy.abc型(带有小数点)
用j标记前导0,执行j++。用i标后导0,执行i--。
(1)那么,max(j) = 2,min(i) = 2.==》全0的情况。
(2)非全0时候,一定是value(j) < value(i)
假设是xyabc型(不带小数点)
同上定义。
(1)max(j) =1 min(i) = 0 .==>全0 情况
(2)只有一个0时候,value(j) = value(i)
(3)全非0时,value(j) < value(i)