struct number {char digits[11];};
以下方法从(* a).digits
中删除前导零void remove_zero(struct number *a);
示例:(* a).digits 000013204 ---> 13204
我的方法是定义变量b等于(* a).digits,开始搜索b中的第一个非零数字,然后将(* a).digits替换为b的其余部分。但是,我在实现代码时遇到了问题
void remove_zero(struct number *a) {
char b = (*a).digits;
while (b){ // <--- (b) indicates that it hasnt reached the terminator,right?
if (b != '0')
{ //<-- here is where to replace (*a).digits with the rest of b, but how to?
break;
}
}
}
答案 0 :(得分:5)
所以你有一个包含例如的数组。
+---+---+---+---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 1 | 3 | 2 | 0 | 4 | \0| | +---+---+---+---+---+---+---+---+---+---+---+
你希望它包含
+---+---+---+---+---+---+---+---+---+---+---+ | 1 | 3 | 2 | 0 | 4 | \0| | | | | | +---+---+---+---+---+---+---+---+---+---+---+
来自&#34;图像&#34;在上面,应该很清楚,这可以使用简单的movement数据来完成。
因此,一种解决方案是找到第一个非零字符,然后从该字符移动到数组的开头。
答案 1 :(得分:3)
一般而言,使用->
运算符(例如,char b = (*a).digits;
运算符来推荐指向结构的指针并访问其属性更为清晰。而不是
char *b = a->digits;
这样做
digits
请注意b
是一个字符数组,因此void remove_zero(struct number *a)
{
char *b = a->digits;
char *end = a->digits + sizeof a->digits - 1;
while (b < end && *b == '0')
b++;
if (b != a->digits)
{
size_t n = end - b;
memmove(a->digits, b, n);
a->digits[n] = '\0';
}
}
需要是一个字符数组,或者是一个指向char的指针,如下所示。
所以:
{{1}}