【问题标题】:Comparing elements from two 2d-arrays in C without strcmp在没有strcmp的情况下比较来自C中两个二维数组的元素
【发布时间】:2018-10-19 18:45:13
【问题描述】:

我正在用 C 创建一个拼写检查器。我有一个字典数组,它是一个二维数组。所以字典中的每个单词在二维数组中占一行。同样,我的输入数组也是一个二维数组。我想检查输入数组中行/单词的拼写。 我无法使用 strcmp

输入数组示例 ['boy','girll','.','friend',' '] - 可以包含空格、标点和单词。我们只关心拼写单词 如果将标点符号/空格与单词进行比较,我们将忽略它并移至下一个单词。

字典示例 ['boy','girl','cow'...]-都是单词

我的代码是:

 for (int a = 0; a < MAX_INPUT_SIZE + 1; a++)
  {

    for (int b = 0; b < MAX_DICTIONARY_WORDS; b++)
    {

        if(tokens[a]==dict_token[b])
        {
          printf("correct");
        }
        else
        {
          printf("wrong");
        }

    }


    }

输出都是“错误的”。虽然 6 个字输入中有 5 个应该是正确的。

【问题讨论】:

  • 你能发布更多代码吗?例如,tokensdict_token 在哪里声明?
  • 看看strcmp
  • 获取tour,阅读How to Ask,和[MVCE]。
  • 我们需要看看 tokensdict_token 是什么才能提供帮助。
  • 我要补充一点,你的做法是错误的。您正在比较两个数组中彼此没有明显对应关系的字符。将您的数据集减少到一些示例来演示您的问题并发布这些示例。通常,您希望遍历输入中的单词,然后在字典中搜索它们。如果字典是某种二叉树就更好了,但你可以使用指向单词的排序指针数组和bsearch 来执行二叉搜索吗?

标签: c string compare


【解决方案1】:

每个测试都返回 false,因为您正在使用比较,

if(tokens[a]==dict_token[b])

正在比较两个永远不会指向同一地址的指针,因为您正在测试的 tokens 与您要与之比较的 dict_token 字典位于完全独立的内存位中。

您需要将两个指针tokens[a]dict_token[b] 传递给一个比较函数,该函数将执行逐个字母的比较,当它发现它们之间存在差异时将返回一个值,当它找到另一个值时将返回另一个值。在没有发现差异的情况下到达两者的终点。也就是说,你需要写一个strcmp的实现。

【讨论】:

  • 你能展示一些代码吗?这样更容易理解
  • 我已尽我所能以帮助您编写函数而不为您编写它的方式来表达答案。试试看!你会犯错,然后学到东西。
  • 我创建了另一个嵌套 for 循环来比较字母。但它效率低下,更重要的是打印了我们错误/正确的 3 次幂。能给点提示吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多