#include<stdio.h>
void delete_string(char str[], char ch)
{
int i, j;
for (i = j = 0; str[i] != '\0'; i++)
if (str[i] != ch) str[j++] = str[i];
str[j] = '\0';
}
从字符串中删除一个键入的字符,这段代码如何理解?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 八云黧 2021-08-02 22:18关注
这是典型的双下标遍历数组的算法
考虑去掉if判断的情况:#include<stdio.h> void delete_string(char str[], char ch) { int i, j; for (i = j = 0; str[i] != '\0'; i++) str[j++] = str[i]; str[j] = '\0'; }
你会发现关键代码
str[j++] = str[i];
并没有修改字符串数组,因为j和i永远是同步的。
再看带上if判断的关键代码if (str[i] != ch) str[j++] = str[i];
,i每次循环就自增但j只有在字符不是要删除的字符时才自增
考虑字符串"hello",即数组['h','e','l','l','o','\0]
想要删除e,
第1轮循环后j=1.i=1
第2轮循环由于if判断为否,直接进行下轮循环,此时j=1,i=2
第3轮循环关键代码就为str[1] = str[2],直接用下一个字符l把待删除字符e给替换了,这里开始i和j这两个下标就永远差1,导致直接把llo往数组的前面移动了一格解决 无用评论 打赏 举报
悬赏问题
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测