为了账号安全,请及时绑定邮箱和手机立即绑定

一道关于字符串中删除数字的问题

一道关于字符串中删除数字的问题

C
肥宅乐 2016-11-04 22:12:45
程序没有问题。str[j++]=str[i]这是什么意思啊???# include <stdio.h>#include <stdlib.h>void DropNum(char* str){int i=0;int j=0; while(str[i]!='\0') { if(str[i]>'9'||str[i]<'0') str[j++]=str[i]; i++; } str[j]='\0';//字符串最后一个字符时'\0'}void main(){char ch[] = "abcd123efg456hijk";    DropNum(ch);printf("%s\n",ch);}
查看完整描述

2 回答

已采纳
?
Yexiaomo

TA贡献152条经验 获得超157个赞

//需要先明白那个算法的 原理,-->(

-->也就是重新整理数组,  看那个if 语句, 如果不是 数字的话执行:  str[j++]=str[i];

-->j 是新的数组 的下标, 从零开始, 如果不是 数字, 将 str[i] 的值存放到 str[j]中

看 j++  ,  自增 符号   在后面, 所以是先进行 ‘++’之外的运算(也就是比‘++’运算级高的运算), 然后在 自增1, 

 str[j++]=str[i];   这条语句, 相当于下面这两条语句:

str[j] = str[i];

j++;

不知道你能不能看懂, 不懂了, 在下面回复

-------------------------------------------------------------分割线----------------------------------------------------------啦啦~~Imcainiao

查看完整回答
1 反对 回复 2016-11-04
  • 肥宅乐
    肥宅乐
    那请问最后再定义了一个[j]为空是什么意思呢? 之前的while循环不是已经遍历完了吗?
  • Yexiaomo
    Yexiaomo
    啊哈! 再看看那个 语句 在哪循环里面, 是在while循环里面, 也就是说, while循环执行一次, 这个语句就会执行 一次, 这个语句就保证了 这个 数组的 最后一个元素就是以 '\0' 结尾的元素, while循环的判断的条件 仅仅是为了 让数组遍历一遍.... 你搞混了, 所以如果还是不懂, 最好自己在纸上 过一遍, 这就会理解会更深刻,不用太长, "a1b2c" 这个就可以
?
一叶追寻

TA贡献38条经验 获得超23个赞



如果str[ i ]这个位置的字符不是数字,就把这个字符放到 str[ j ] 这个新的数组里,放了之后 j 自增1 ,以便存放下一个字符


查看完整回答
反对 回复 2016-11-04
  • 2 回答
  • 0 关注
  • 1444 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信