【问题标题】:How does an array boolean correlate a Char entry to true or false?数组布尔值如何将 Char 条目与真或假相关联?
【发布时间】:2018-12-27 21:29:17
【问题描述】:

我正在使用布尔数组来检查字符出现检查程序是否已看到 Char。

我的问题是:数组布尔值如何/为什么/可以将 Char 条目与真或假相关联?

for (i = 0; i < len; i++) {
 char c = text[i];
 if (seen[c]==true) {
  continue;
 }
seen[c]=true; 

下面是包含有问题的“布尔”的代码 sn-p。注意这里使用 bool 有效,想知道为什么/如何。

char* text = lower_case_all();

bool seen[256];
int i;
char c;
for (i = 0; i < 256; i++) {
 seen[i]=false;
}

int len = strlen(text);

for (i = 0; i < len; i++) {
  char c = text[i];
  if (seen[c]==true) {
    continue;
  }
  seen[c]=true;
  int occs = compute_occ(c, text);
  if (occs>0) {
    printf("%c : %d : ",c, occs );
 }
}

【问题讨论】:

  • c 用作标志数组的索引,指示在先前的处理中是否曾见过c 的值。这将调用compute_occ 限制为每次出现c 的任何给定值时仅调用一次。将char 等同于bool 与该算法没有任何关系 (顺便说一下,如果您在c 和@987654332 中获得不在0x00..0x7F 中的值,则该算法会出现未定义的行为@ 是在你的平台上签名的,就像在大多数平台上一样)。
  • 旁白:bool seen[256]; .... if (seen[c]==true) {WET。考虑编码if (seen[c]) {。它可能有助于使代码更清晰。
  • 使用char cc 用作数组seen[] 的索引。不幸的是,c 可能是负数,然后seen[c] 是未定义的行为 (UB)。
  • 令我困惑的是:“我正在使用布尔数组来检查字符出现检查程序是否已经看到了一个字符。” - 如果 写了这个,你怎么能不理解和回答你自己的问题?你肯定知道为什么要以这种方式编写代码,对吧?

标签: c char boolean


【解决方案1】:

当用作数组的索引时,C 字符将转换为它们的 ASIC 编号等价物。

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 2020-01-05
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    相关资源
    最近更新 更多