【发布时间】:2014-04-08 01:15:26
【问题描述】:
我正在尝试编写一个 C 程序来计算短语中某些字母的频率。程序逐字符读取短语(通过将字符存储在数组中的mmap)并将当前字母与所需字母进行比较。如果存在匹配,则计数器递增。但是,在运行我的代码时,我得到了奇怪的结果。频率没有增加,因为字母在对strcmp 的调用中不匹配,即使它们在调试中匹配。我的程序中发生了什么导致这种行为?
char* data; /* input contents from mmap */
char* currChar; /* character being compared to */
char inChar; /* character being read */
...
do {
/* get character */
inChar = 0;
inChar = data[i];
/* debug */
printf("data[i] = %c, inChar = %c, &inChar = %c, currChar = %s\n",
data[i], inChar, &inChar, currChar);
/* if match */
if (strcmp(&inChar, currChar) == 0) {
/* increment frequency */
freq++;
}
/* increment position */
i++;
} while (inChar != 0);
以下是尝试计算单词“and”中“a”出现频率时的示例输出。
data[j] = a, inChar = a, &inChar = S, currChar = a
data[j] = n, inChar = n, &inChar = S, currChar = a
data[j] = d, inChar = d, &inChar = S, currChar = a
0 instances of a
【问题讨论】:
-
您是否尝试过只检查
inChar == *currChar? -
currChar 甚至没有启动。要比较字符,只需使用 '==' 运算符。
-
每当看到标题说某些工具无法正常工作时,99.9% 的可能性是发帖者是新手并且该工具被滥用。为什么要尝试使用字符串比较函数来比较单个字符?