【发布时间】:2021-06-04 15:53:12
【问题描述】:
此代码检查两个字符串是否为一个字谜。你能解释一下它是如何工作的吗?
#include <stdio.h>
int t[256],i;
int main(int c)
{
for(;c+3;)
(i=getchar())>10?t[i]+=c:(c-=2);
for(i=257;--i&&!t[i-1];);
puts(i?"false":"true");
}
这是我在查看源代码时所理解的: 它维护一个数组 t[],并将值存储在 index = 字符的 ascii 值。第一个字符串的字符存储的值为 1,第二个字符串的字符存储的值为 -1。如果两个字符串中都有一个字符,则其中存储的值为零。 1 + (-1)。第一个 for 循环是输入。
你能解释一下这个循环正在检查什么,它是如何设置变量 i 的值的:
for(i=257;--i&&!t[i-1];);
代码来自:https://developerinsider.co/find-anagram-string-programming-puzzles/
【问题讨论】:
-
看到这个让我头疼。查找新教程。
-
这是一团糟,但如果你解码它会怎么样,
for (i = 257; --i != 0 && t[i-1] == 0;) ;。;最后是一个空语句,不执行任何操作。
标签: arrays c loops for-loop anagram