在char数组中搜索C中数组中的位置

时间:2014-09-16 04:32:20

标签: c arrays search

不确定是否有人问这个问题,我真的不知道怎么问:我要发布我的代码,我知道我很远,但我想表明我尝试过但失败了。

我会发布代码然后解释它,然后提供更多信息:

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.

3 个答案:

答案 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

如果您有任何疑问,请随时提出。