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

标签 c arrays element

我有一个这样的字符数组:

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

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

不要那样做

相对于

不要那样做

我将如何创建一个不包含标点符号的新数组?

最佳答案

只需复制新数组,避免使用标点符号,并在输出数组的末尾添加一个 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;
}

您可以根据您的要求增加/减少标点数组大小。默认 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;
}

关于从先前数组的子集创建新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49917488/

相关文章:

c - 对哈希表进行排序 Glib - qsort

c - C的二进制流解析库

遍历列表元素时的 C 问题

c++ - 选择 xml 元素

c - 使用具有相邻内存的指针定义二维数组

c - 同时读取和写入变量

c++ - 基于排序的分区(如快速排序)

python - 使用 Selenium 选择具有更改值的单选按钮

JavaScript 多次打印

c - 为什么我不能在 C 中传递的函数内打印数组的大小?