字符串的字符数和字母顺序

时间:2018-12-22 09:58:46

标签: c string

开发一个C程序来执行以下操作:

  • 创建两个由25个元素组成的1-D字符数组,分别命名为first和second。
  • 要求用户输入两个字符串,然后将它们分别存储在数组中。
  • 将两个数组都传递给名为countChars的函数,该函数对每个字符串中的字符数进行计数并打印。
  • 将两个数组都传递给另一个名为order的函数,该函数确定并返回结果,该结果显示哪个字符串以字母顺序在另一个字符串之前。当主函数接收到返回的结果时,它将打印一条消息以显示其顺序。例如,如果第一个字符串是“绿色”,第二个字符串是“白色”,则该函数确定绿色按字母顺序在白色之前。主要功能会显示一条陈述: “按照字母顺序,\ green \在\ white \之前”。

代码:

<?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

1 个答案:

答案 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 charstr...()函数将字符评估为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);
}