gpt4 book ai didi

c - 删除C中字符的标点符号

转载 作者:行者123 更新时间:2023-11-30 19:26:49 26 4
gpt4 key购买 nike

我有一个名为 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;
}

最佳答案

我更新了您的 chip_punct 函数以给出所需的结果。

  1. 我调用 isalnum 来检查字母数字 - 字母和数字。 isalpha 仅检查字母。
  2. 我使用标志addSpace来记住最后一个字符是否不是字母数字。然后,在添加字符之前,我检查是否需要添加空格。
  3. 我用 ch0 记住第一个 ch 位置,以避免在开头添加空格。
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);

关于c - 删除C中字符的标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56567578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com