开发一个C程序来执行以下操作:
代码:
<?php
declare(strict_types = 1);
interface MyInterface
{
public function foo(array $foo);
}
class Bar implements MyInterface
{
public function foo($foo)
{
return $foo;
}
}
echo (new Bar)->foo('test'); // runs just fine as string
答案 0 :(得分:0)
order()
的目标与strcmp()
的功能相匹配。
因此order()
的快速解决方案是
int order(char *first, char *second) {
return strcmp(first, second);
}
也许目标是re-invent the wheel。
正如@David C. Rankin所评论的那样,沿着字符串寻找差异。
然后使用(a > b) - (a < b)
的通用C习惯用法进行比较。这样可以避免所有溢出问题-即使类型为char
时也不太可能。
// return 0 on match
// return 1: first > second
// return -1: first < second
int order(char *first, char *second) {
while (*first && *second && *first == *second) {
first++;
second++;
}
return (*first > *second) - (*first < *second);
}
一些改进:
使用const
允许使用const char *
以及char *
参数的函数调用。
无需测试*first
和*second
。
首先更有效地测试更可能的失配。
自由使用()
可能有助于清楚地理解代码。
比较为unsigned char
。 str...()
函数将字符评估为unsigned char
,即使char
是 signed 。订购带负号的字符串时,这会有所不同,OP的数据不太可能。
。
int order_alt(const char *first, const char *second) {
while ((*first == *second) && *first) {
first++;
second++;
}
return ((unsigned char)*first > (unsigned char)*second) -
((unsigned char)*first < (unsigned char)*second);
}