从C中的字符中删除标点符号

时间:2019-06-12 17:32:02

标签: c

我有一个名为adc.txt的文本文件,我正在尝试读取字符并删除其中的所有标点符号。

文件adc.text

*1. g7 h(8) zs89';
2. ;';fd(sa

实际结果是:

ghzsfdsa

我期望的是:

g7 h 8 zs89 fd sa

有什么建议吗?

这是我的代码:

void chip_punct(char *ch){
    for(char *p = ch; *p; ++p)
        if(isalpha(*p))
            *ch++ = *p;
    *ch = '\0';
}

int main(void){
    FILE *fp;
    char ch[1024];
    size_t pos =0;

    fp = fopen("adc.txt", "r");
    if(fp != NULL){
        while(!feof(fp)){
            fgets(ch, sizeof(ch), fp);
            chip_punct(ch);
            printf("%s", ch);
        }
    }
    fclose(fp);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

我更新了您的chip_punct函数以提供所需的结果。

  1. 我打电话给isalnum检查字母数字-字母和数字。 isalpha仅检查字母。
  2. 我使用标志addSpace来记住最后一个字符是否不是字母数字。然后,在添加字符之前,我检查是否需要添加空格。
  3. 我记得ch的第一个ch0位置是为了避免在开头添加空格。
void chip_punct(char *ch) {
    int addSpace = 0; // Flag if need to add space
    char *ch0 = ch; // Remember first position
    for (char *p = ch; *p; ++p)
    {
        if (isalnum(*p)) // Check if char is alphanumeric
        {
            if (addSpace && ch > ch0) // Check if need to add space
                *ch++ = ' ';
            *ch++ = *p;
            addSpace = 0;
        }
        else
            addSpace = 1;
    }
    *ch = '\0';
}

输出:

1 g7 h 8 zs892 fd sa

下一行zs892之间没有空格是因为main打印时没有空格。您可以通过添加空格来更改它:printf("%s ", ch);

答案 1 :(得分:-1)

到达符号时,您正在向左移动元素。尝试用await AsyncStorage.removeItem('key'); 替换符号。