【问题标题】:C - strcmp() two strings from arrays [closed]C - strcmp() 来自数组的两个字符串 [关闭]
【发布时间】:2014-05-08 21:12:08
【问题描述】:

我正在比较两个字符串,每个字符串都来自数组。

while(countX<10){
    if(strcmp(scanWord[countX], currentWord[countX]) == 0)
        {scoreCurrent++;scoreCurrent++;}
    countX++;
}

"scanWord[countX]" 和 "currentWord[countX]" 不比较;每次出现时,即使它们是相同的,它们也不相同。如果我比较那些不是这些的东西并且我已经将它们打印到屏幕上进行检查,它会起作用。他们似乎打得不太好。提前致谢。

【问题讨论】:

  • 恐怕信息不够。您描述它和查看代码的方式应该可以工作。由于它不起作用,您可能希望显示这些单词如何在数组中结束。小问题:为什么两次scoreCurrent
  • @Jongware fgets(currentWord[countX], 20, stdin); fscanf(dataMarking, "%[^:]:%[^\n]%*c", scanWord[countX], scanDescription[countX]) 这有帮助吗?而这两个 scoreCurrents 都是出于懒惰。
  • 如何声明scanWordcurrentWord
  • 雅皮士。又一个“你忘记删除尾随硬回车”的场合了。
  • fgets() 将换行符留在字符串中。你确定两个字符串都有换行符吗?

标签: c arrays string strcmp


【解决方案1】:

当您阅读该行时,删除换行符:

char *line = fgets(currentWord[countX], 20, stdin);
if (line) {
    int len = strlen(line);
    if (line[len-1] == '\n') {
        line[len-1] = 0;
    }
}

【讨论】:

  • 感谢您解决这个问题!
  • n 总是 >0,除非发生错误,但它不是数字。 fgets 返回“str 成功,NULL 失败”——其中str 是指向缓冲区开头的指针。
  • 谢谢,已修复它以使用strlen 查找最后一个字符。
  • 没关系,但是(抱歉继续唠叨)没有特别需要创建一个新的char *。您可以立即使用strlen(currentWord[countX])
  • 我知道。但由于我想检查是否成功,我想我会创建一个短变量名而不是索引。
【解决方案2】:

我看到的问题:

"scanWord[countX]" 和 "currentWord[countX]" 不比较;每次都说它们不一样,即使它们是一样的。

你怎么知道这两个值是一样的?打印出来。也打印出长度。如果处理任何类型的 Unicode,请以十六进制打印出各个字节,因为看起来相同的两个 Unicode 字符实际上可能不同。

因为如果字符串真的相同,计算机永远不会说它们是不同的。我读到的问题的答案是字符串实际上是不同的。

【讨论】:

  • 这是评论,不是答案。
  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • @Zack:“接受的答案”也没有回答这个问题。他猜了一下,走运了。
猜你喜欢
  • 2021-11-03
  • 2018-02-03
  • 2012-12-24
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
相关资源
最近更新 更多