首页 > 初学c,squeeze(s1,s2)练习出错,请指导

初学c,squeeze(s1,s2)练习出错,请指导

squeeze(s1, s2),将字符串s1中任何以字符串s2中字符匹配的字符都删掉

#include <stdio.h>

void squeeze(char s1[], char s2[])
{
            int i, j, k;

        for (i = k = 0; s1[i] != '\0'; i++){
                for (j = 0; s2[j] != '\0' && s2[j] != s1[j]; j++)
                        ;
                if (s2[j] == '\0')
                        s1[k++] = s1[i];
        }
        s1[k] = '\0';
}

    main()
    {
            char s1[], s2[];
            s1 = "1234567";
            s2 = "345";
            squeeze(s1, s2);
            printf ("%s, %s" s1, s2);
    }

出错显示

squeeze_12.c: In function ‘main’:
squeeze_12.c:18:7: error: array size missing in ‘s1’
squeeze_12.c:18:13: error: array size missing in ‘s2’
squeeze_12.c:19:5: error: incompatible types when assigning to type ‘char[1]’ from type ‘char *’
squeeze_12.c:20:5: error: incompatible types when assigning to type ‘char[1]’ from type ‘char *’
squeeze_12.c:22:19: error: expected ‘)’ before ‘s1’
squeeze_12.c:22:19: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat]
squeeze_12.c:22:19: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat]

#include <stdio.h>
#include <stdlib.h>

#define TRUE  1
#define FALSE 0

void squeeze(char s1[], char s2[]);

int main(void)
{
    char s1[] = "abcdef";
    char s2[] = "bdf";
    squeeze(s1, s2);
    printf("%s\n", s1);

    return EXIT_SUCCESS;
}

/* squeeze:  delete all characters from s1 that match any in s2 */
void squeeze(char s1[], char s2[])
{
    int i, j, k;
    int instr2;

    for (i = j = 0; s1[i] != '\0'; i++) {
        instr2 = FALSE;
        for (k = 0; s2[k] != '\0' && !instr2; k++)
            if (s2[k] == s1[i])
                instr2 = TRUE;
        if (!instr2)
            s1[j++] = s1[i];
    }
    s1[j] = '\0';
}

https://github.com/thvdburgt/KnR-The-C-Programming-Language-Solutions/blob/master/Chapter%202/2-4/squeeze.c


时间复杂度可以从O(mn) 降到 O(m+n)

void squeeze(char s1[], char s2[])
{
        char    cs2[256];
        char    *p = s1;

        memset(cs2, 1, 256);
        for(; *s2; s2++)
                cs2[*s2] = 0;

        for(; *s1; s1++)
                if(cs2[*s1])
                        *p++ = *s1;
        *p = '\0';
}

先简单说说:
1、char s1[];char s2[];s1 =" sdfdsf";s2 = "sdfsdf"; 这是不合法的
2、main 函数是应该有返回值的

打完球回来再细说:)

【热门文章】
【热门文章】