jtu*_*lan 0 c arrays numbers char
我创建了一个函数,可以在数组中找到任何数字并删除它们.这是我的代码:
int noNums (char *a) {
int i;
int deleteInd;
for (i = 0; (i < MAX_NAME_SZ) && (a[i] != '\0'); i++) {
if ((a[i] >= '0') && (a[i] <= '9')) {
deleteInd = i;
memmove (&a[deleteInd], &a[deleteInd + 1], strlen (a) - deleteInd);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果一个数字本身就在char数组中,则它被删除,没问题.但是,如果数组中有连续的数字,那么只会删除其他所有数字?
如果我的char数组有
w12345678
然后将数组更改为
w2468
代替
w ^
有任何想法吗?
执行此操作后memmove(),下一个元素现在位于刚刚删除的元素的索引中.但是你的循环会这样做i++,所以你不会再次检查那个索引.因此,只要一行中有两个数字,就跳过第二个数字.
解决此问题的一种方法是从数组的末尾循环到开头,而不是从开头到结尾.
另一种方法是在做完i--之后做memmove(),以抵消i++循环将要做的事情.
if (isdigit(a[i]) {
deleteInd = i;
memmove (&a[deleteInd], &a[deleteInd + 1], strlen (a) - deleteInd);
i--;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,你应该isdigit()用来测试一个字符是否是一个数字.
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |