在C语言中删除非字母字符

3
有没有一种相对简单的方法可以将字符数组中所有非字母字符替换为空格,就像你可能使用以下bash命令一样?
sed 's/[^a-zA-Z]/ /g'
我唯一能想到的是通过循环字符数组并逐个比较和替换字符的方式。我不知道是否有一个C函数可以做到同样的事情。
1个回答

4
据我所知,无论如何都没有比O(n)更好的方法来实现这个功能。即使有这样的函数或正则表达式引擎,它们的效率也可能比简单的线性复杂度解决方案低。你可以只需循环遍历数组,将任何小于“A”或大于“z”的内容设置为“ ”。
while(*array)
{
  if(!isalpha(*array))
    *array = ' ';

  array++;
}

非常有帮助。我最终使用了类似于 code i = 0; while (i < sizeof(word)) { if (word[i] < 'A' || word[i] > 'z') word[i] = ' '; i++; }\code` 的东西。 - Acroyear
3
你可以使用!isalpha((unsigned char)*array)作为测试条件(isalpha()<ctype.h>头文件中声明)。 - caf
@user2227422,我不知道你可以这样做。 - Jonathan Henson
1
@user2227422 只需在代码两侧使用 符号。它将看起来像这样`。 - Anil Bhaskar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接