删除字符s中所有数字字符,空的是要填空的。
void dele(char *s)
{ in n=0,i;
for(i=0;s[i];i++)
if( ) //if(s[i]>='0'&&s[i]<='9'这是我自己填的
s[n++]=s[i];
s[n]= ;//s[n]=0;
}
我想问;如果按照我的思路,if条件判断s【i】里面是不是数字字符,是就保存下来,然后清零,但问题来了,s【n++】运行后不是加了一吗?要清零的s【n】不就变成s【n+1】吗?那清零还有用吗?
再者我想知道if条件句的{}是在s【n++】=s【i】;这结束,还是在末尾结束。
然后当是s【i】第一个字符不是数字字符时,他是直接运行到哪里?
s[n++]
运行后不是加1吗?
首先,你需要搞清楚n++
和++n
的区别。n++
代表的是先进行运算,再+1,而++n
表示先+1,再进行运算。
再者我想知道if条件句是在
s[n++]=s[i];
这结束,还是在末尾结束。
这是一个作用域的问题。如果if语句后没有{}
的话,其作用域仅仅为一条语句,也就是s[n++]=s[i];
这条语句。如果有{}
作用域即到}
结束。
然后当是
s[i]
第一个字符不是数字字符时,他是直接运行到哪里?
当第一个字符不是数字时,指针移动到下一个位置,也就是说s[1]
这都是比较基础的问题,建议你好好回看一下课本,夯实一下基础。
另外,你的代码似乎也有些问题,不知你做的是题目还是老师出的习题。你可以在电脑上运行一下试试。
你回答的第一个问题,我意思是,当符合if条件语句了,执行到s【n++】=s【i】,那这句的意思就是s【n】=s【i】,n+1,继续执行下去s【n】=0;这时候的n已经变成了1,s【1】=0,这样清零还有作用吗?
你回答的第三个问题,能具体点吗,我的想法是这样的:当数组里面遇到不是数字字符的时候,不符合if条件句,那直接执行到s【n】=0;这清零有意思?还是怎么跳过全部,直接到i++这部分,然后再判断?能给我解释一下吗?
@ccccc三: 请问你这个题目是哪里来的?我觉得代码有些问题。不好意思,理解错你第一个问题的意思了。
正确答案应该是:
if(s[i]<0'||s[i]>'9)'
s[n]=s[++i];
如果s[i] 不是数字,那么s[n] =s[i],n++
如果是数字,++i 跳过这个数字,再s[n] = s[i]
n的作用实际上用来 重新赋值 s 数组的,