0

我试图将字符串解析为字母,因此所有标点符号、数字、符号等都被视为分隔符。这是我的问题:有很多非字母字符要分隔。

有没有办法过滤所有这些字符?我的意思是有 26 个标准英文字母,如果算上大写字母,则有 52 个。我知道 ASCII/Unicode 并不能真正以这种方式工作,但似乎应该有某种排他性方法,因为我可以提供我想要允许的所有字符并在 ASCII/Unicode 表中建立其他所有内容一个分隔符。

所以我想我在问,这样的事情可能吗?您可以隔离 65-90 和 97-122 (Unicode) 范围之外的所有内容吗?

我目前正在使用它作为我的分隔符字符串,虽然它可能捕获了 95% 需要捕获的字符,但我想要更实质性的东西:

#define DELIMITERS " 0123456789<>?:,./;'[]{}-=_+\\\""
4

4 回答 4

1

例如,执行此操作的常用方法是使用正则表达式[^a-zA-Z]+

于 2013-06-04T01:03:50.200 回答
1

另一种方式——使用 ctype.h 中的 isalpha()

char ok[80]={0x0};  // 80 bytes max
char *p=input_str;
char *q=ok;
for(*q=0x0; *p; p++)
{
    if( isalpha((int)*p) )
    {
        *q=*p;
        q++;
        *q=0x0;
    }
}
printf("%s\n", ok);
于 2013-06-04T01:24:44.797 回答
0

在这里您可以找到 regex.h 的文档。它是 C 的正则表达式库。

花点时间学习正则表达式,你会发现这个问题很容易解决;)。

于 2013-06-04T09:05:55.220 回答
0

这取决于您的输入数据是什么样的以及您如何实现解析器。我假设您目前正在使用类似 的东西strsep(),您当前的方法是合理的(但不是非字母字符的完整列表,请参见例如#, $, %)。

如果您编写自己的标记化函数(或者如果您想以编程方式构建分隔符字符串),请查看isalpha()and iswalpha()in ctype.h/ wctype.h

于 2013-06-04T01:16:41.437 回答