2013-05-09 105 views
2

我试图检查,看看我给一个字符数组 - 这样有没有什么办法来检查C中的字符串中是否存在任何或全部字符?

char array_values[] = { 'A','B','C','D','a','b','c','d' }; 

,然后运行一种在多串字符匹配的EG-

.... 
str1 = 'AACDBACBAabcAcddaAABD' 
str2 = 'aacbdAABDCAaDDCBCAabc' 
.... 

,然后再返回字符串中存在的每个字符的计数。

我知道这很容易在python,R,perl中完成,但我想用C来解决这个问题。 也许像正则表达式那样?有任何想法吗?

+0

您使用ANSI C吗?因为如果你是正规表达式不是ANSI C的一部分,你必须使用循环机制。 – Marco 2013-05-09 13:04:46

+0

你想做什么?对于每个字符串'strX',计算'array_values'中每个字符出现的频率? – 2013-05-09 13:05:40

+0

'strpbrk'是第一部分的选项。 – 2013-05-09 13:05:43

回答

4

做C语言中的最简单方法是在array_values不论其存在的数每一个字符,然后用array_values项目为指标进入计数的阵列来获得满意的结果:

int count[256]; 
for (int i = 0 ; i != 256 ; count[i++] = 0); 
// The example works with a single string. For multiple strings, 
// iterate over the strings from your source in a loop, assigning str 
// and incrementing the counts for each of your strings. 
char *str = "AACDBACBAabcAcddaAABD"; 
for (char *p = str ; *p ; count[(unsigned char)*p++]++); 
char array_values[] = { 'A','B','C','D','a','b','c','d' }; 
for (int i = 0 ; i != 8 ; i++) { 
    printf("Found '%c' %d times", array_values[i], count[(unsigned char)array_values[i]]); 
} 

这里一个demo on ideone

+0

注意:在大多数实现中,字符**默认**签名**。 – wildplasser 2013-05-09 13:19:33

+0

@wildplasser你说得对,添加'unsigned'是个好主意。谢谢! – dasblinkenlight 2013-05-09 13:27:44

+0

你现在投它的方式会绕回到UINT_MAX-某事,恕我直言。 (肯定会崩溃) – wildplasser 2013-05-09 13:30:12

相关问题