我正在尝试将字符串解析为仅字母,因此所有标点符号,数字,符号等都会被视为分隔符。这是我的问题:有一个很多的非字母字符可以分隔。
有没有办法过滤所有这样的字符?我的意思是有26个标准的英文字母和52个如果算上限。我知道ASCII / Unicode并不是真的以这种方式工作,但似乎应该有某种排他性方法,因为我可以提供我想要允许的所有字符,并在ASCII / Unicode表中建立其他所有字符分隔符。
所以我想我问,这样的事情可能吗?你能否隔离65-90和97-122(Unicode)范围之外的所有东西?
我目前正在使用它作为我的分隔符字符串,虽然它可能捕获了95%需要捕获的字符,但我还是喜欢更实质的字符:
#define DELIMITERS " 0123456789<>?:,./;'[]{}-=_+\\\""
答案 0 :(得分:1)
执行此操作的库存方式为regular expression,例如[^a-zA-Z]+
。
答案 1 :(得分: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);
答案 2 :(得分:0)
这取决于您的输入数据是什么样的,以及您如何实现解析器。我假设您当前正在使用strsep()
的内容,您当前的方法是合理的(但不是完整的非字母字符列表,请参阅#
,$
,%
)。
如果您编写自己的标记化函数(或者如果要以编程方式构建分隔符字符串),请查看isalpha()
/ {{1}中的iswalpha()
和ctype.h
}}
答案 3 :(得分:0)
Here您可以找到regex.h的文档。它是C的正则表达式库。
花点时间学习regular expressions,你会发现这个问题很容易解决;)。