我有一个名为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;
}
答案 0 :(得分:1)
我更新了您的chip_punct
函数以提供所需的结果。
isalnum
检查字母数字-字母和数字。 isalpha
仅检查字母。addSpace
来记住最后一个字符是否不是字母数字。然后,在添加字符之前,我检查是否需要添加空格。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
下一行zs89
和2
之间没有空格是因为main
打印时没有空格。您可以通过添加空格来更改它:printf("%s ", ch);
答案 1 :(得分:-1)
到达符号时,您正在向左移动元素。尝试用await AsyncStorage.removeItem('key');
替换符号。