不确定是否有人问这个问题,我真的不知道怎么问:我要发布我的代码,我知道我很远,但我想表明我尝试过但失败了。
我会发布代码然后解释它,然后提供更多信息:
while(i<41)
{
if (buffer[i] != 0)
{
newplace = i;
}
i++;
}
buffer是一个长度为42的char数组。最后一个位置是空占位符。
缓冲区将从END开始接收值。我按相反的顺序。问题是当我打印它填充0的第一个位置,这很烦人。我的目标是找到第一个不是0的位置,并将其保存为变量(newplace)作为占位符。一旦保存,我可以从这个新的占位符开始循环打印数组。这听起来很基本,我可能非常接近(或非常错误)。
我觉得一旦我找到了需要在那里休息的价值,因为它会继续前进并找到下一个值并进行更改。每次我尝试这个都会给我一个错误。
我也知道我最终看起来很愚蠢。别担心,我知道。我只是放弃了尝试解决它。
最后,如果有什么我错过了让我知道。我将编辑或添加代码。感谢。
编辑:这是它的打印:000000000000000012345。我希望它打印12345。 编辑:现在输出到数组的末尾,因为我计算到40。它进入我的第二个打印循环并打印newplace,因为它打印出40,然后它打印的值为数组从40到41,如最后一位数字。 编辑:我觉得我越来越近了。我对它进行了修改,以便比较2个char数组而不是数组和char。for(;i<41;i++)
{
if (buffer[i] != "0123456789ABCDEF"[0])
{
newplace = i;
//break;
}
}
“0123456789ABCDEF”[0]我改变了。它打印的是最后已知的值,它不是0:这意味着:如果有1010,它会查看最后1并打印10.我希望它找到第一个。
也是这个我试过100并且它打印了100.但如果它的10100它将打印100,我想要它打印10100.
答案 0 :(得分:1)
int i = 0;
int start = -1;
while(buffer[i] != 0) { // Assumes 0 terminated array
if (buffer[i] == '0') {
start = i;
break;
}
i++;
}
if (start >= 0) {
// start is valid, so do output...
}
答案 1 :(得分:0)
不是真的答案:但我用不同的方式解决了它。
在我的主要论点中改变一句话,说不要把这些值放进去,那么它们就是空的,然后整个事情只是浪费时间。
我有
while(place>0)
并将其更改为
while(place>0 && value != '\0')
真的脱离了上下文,因为我没有提供我的所有代码。
GG WP。感谢所有帮助人员!!!
答案 2 :(得分:0)
有许多方法可以在包含其他字符的字符串中的所需位置开始打印。您可以从头开始并逐步降低字符串,直到找到您想要的角色,或者,您可以从最后开始并向后工作。在任何一种情况下,您都使用指针设置到您想要开始搜索所需字符的位置,然后检查字符串中的每个字符,递增或递减指针,直到找到所需的字符。向前的方向是直截了当的:
#include <stdio.h>
int main (void) {
char buffer[] = "00000000000000000012345"; /* zero pad buffer and string */
char *sp = NULL; /* pointer to wamted part of buffer */
sp = buffer; /* set pointer to beginning of buffer */
while (sp++) { /* for each character in buffer */
if (*sp != '0') { /* if pointer != '0' */
break; /* break, sp points to wanted string */
}
}
/* print original buffer and wanted end string
(pointed to by sp) */
printf ("\n buffer : %s\n", buffer);
printf (" sp (wanted end of buffer) : %s\n\n", sp);
return 0;
}
<强>构建强>
gcc -Wall -Wextra -o bin/fbuf fwdbuffer.c
生成/输出:强>
$ ./bin/fwdbuf
buffer : 00000000000000000012345
sp (wanted end of buffer) : 12345
为什么倒退?在许多情况下,例如在使用calloc
分配内存时,或者使用memset
将字符串设置为null时,无法正向工作。在这种情况下,向后工作是关键:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void) {
char buffer[] = "00000000000000000012345"; /* zero pad buffer and string */
char *sp = NULL; /* pointer to filled part of buffer */
size_t i = strlen (buffer); /* len of buffer (not incl. null ) */
sp = buffer + i - 1; /* set pointer at buffer null-term */
while (sp-- && i--) { /* backup in buffer until '0' */
if (*sp == '0') { /* if pointer == '0' */
sp++; /* increment by 1 to last good char */
break; /* break, sp points to wanted string */
}
}
/* print original buffer and wanted end string
(pointed to by sp) */
printf ("\n buffer : %s\n", buffer);
printf (" sp (wanted end of buffer) : %s\n\n", sp);
return 0;
}
<强>构建强>
gcc -Wall -Wextra -o bin/rbuf revbuffer.c
生成/输出:强>
$ ./bin/rbuf
buffer : 00000000000000000012345
sp (wanted end of buffer) : 12345
如果您有任何疑问,请随时提出。