从先前数组的子集创建新数组

时间:2018-04-19 09:28:37

标签: c arrays elements

我有一系列像这样的字符:

    #define SIZE 4096
    char array[SIZE];
    fgets(array, SIZE, stdin);

我想删除任何标点符号,例如('),以便数组元素为:

不知道

而不是

d o n t t t t t

我如何制作一个不包含标点字符的新数组?

2 个答案:

答案 0 :(得分:2)

只需复制新数组,避免使用标点符号,并在输出数组的末尾添加null终结符:

int main() 
{
    char punctuation[] = { '.', '?', '!', ':', ';',
                            '-', '(', ')', '[', ']',
                            ',', '"', '/'};

    char input[SIZE], output[SIZE];
    int i, j, k, ch, flag;

    i = j = k = flag = 0;

    /* get the input string from the user */
    printf("Enter your input string:");
    fgets(input, SIZE, stdin);
    input[strlen(input) - 1] = '\0';

    /* copy characters other than punctuations */
    while (input[i] != '\0') 
    {
        flag = 0;
        ch = input[i];

        for (j = 0; j < sizeof(punctuation); j++) 
        {
            if (ch == punctuation[j])
            {
                flag = 1;
                break;
            }
        }

        if (!flag) 
        {
            output[k++] = input[i];
        }

        i++;
    }

    output[k] = '\0';

    /* print the resultant string */
    printf("Resultant String: %s\n", output);
    return 0;
}

您可以根据需要增加/减少punctuation数组大小。默认的C语言环境将这些字符分类为标点符号:

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

在C中还有一个默认函数ispunct

int main()
{
    int i;
    printf("All punctuation characters in C"
            " programming are: \n");
    for (i = 0; i <= 255; ++i)
        if (ispunct(i) != 0)
            printf("%c ", i);
    return 0;
}

答案 1 :(得分:-2)

#define SIZE 4096
char array[SIZE];

char result[SIZE];
fgets(array, SIZE, stdin);

for(int i=0; array[i]; i++)
{
    char a;
    a = array[i];
    if((a > 0x20) && (a < 0x2f))
        continue;
    else
        result[i] = a;
}

result[i] = '/0';