【问题标题】:Compare int to string [duplicate]将 int 与字符串进行比较 [重复]
【发布时间】:2012-11-27 07:56:15
【问题描述】:

可能重复:
Understanding NSString comparison in Objective-C

我想比较一个 int 和一个字符串,但我的代码不起作用。这是我的代码:

NSLog(@"enterPressed was called");
int answer = firstNumber + secondNumber;
NSLog(@"Real Answer: %d", answer);

NSString *numberFromTextField = inputTextField.text;
NSLog(@"Number From Text Field: %@", numberFromTextField);

if (numberFromTextField == [NSString stringWithFormat:@"%d", answer]) {
    NSLog(@"Correct!");
}

这是控制台:

2012-12-09 13:10:55.087 MathQuiz[10728:c07] enterPressed 被调用

2012-12-09 13:10:55.087 MathQuiz[10728:c07] 真实答案:60

2012-12-09 13:10:55.088 MathQuiz[10728:c07] 文本字段中的数字:60

为什么不说“正确!”?

【问题讨论】:

  • 哎哟。这很伤人。我是说,认真的。在尝试制作 The Best iOS App Ever (TM)...之前,请正确学习 C 并阅读一些通用的良好编程实践
  • 我正在自学 Objective-C。这就是学习过程。在我的问题中,我没有说我是专家,所以不要批评我不知道专家会知道的一切。
  • @H2CO3 我不同意。自学成才,我认为一个很好的学习方法就是投入其中并在你去的时候弄清楚。当然,在此过程中你必须学习一些好的编程实践,但你会更有动力,而且你会更好地记住你学到的东西,如果你“只是去做”。
  • @DOK “自学成才”——我也是。我在学校从来没有学过这个。然而我在 SO 上没有这样的问题(但在我的 Google 搜索历史中很多)。
  • @kiamlaluno: C 没有NSString,但它有== 运算符并且它有指针,并且== 带有指针的行为在C 和Objective 中是相同的-C :)

标签: iphone objective-c ios nsstring int


【解决方案1】:

你不能使用==来比较两个Objective-C对象,除非你想知道这两个对象是否相同(即==的两边都指的是同一个对象,而不是两个具有相同值的不同对象)。

要比较字符串是否相等,你必须使用:

if ([str1 isEqualToString:str2])

// or, compare to a constant string:

if ([str1 isEqualToString:@"String 2"])

// or, compare to a string made up on the spot:

if ([str1 isEqualToString:[NSString stringWithFormat:@"%d", answer])

但是,在您的场景中,比较两个整数而不是两个字符串可能更好,因此,您需要将文本字段中的字符串转换为整数:

int num = [numberFromTextField intValue];

if (num == answer)
{
    NSLog(@"Correct!");
}

请注意intValue在字符串不包含有效数字时会返回0,所以如果answer为0,而用户输入的数字无效,技术上会判断为正确不是。考虑使用NSNumberFormatter 甚至NSScanner 来确定输入是否有效,然后再以任何方式与answer 进行比较。

【讨论】:

    【解决方案2】:

    你需要比较它,

    if ([numberFromTextField intValue] == answer)
    

    (numberFromTextField == [NSString stringWithFormat:@"%d", answer]) 正在比较两个字符串的内存地址。不是价值观。以下将为您提供正确的值,

    if ([numberFromTextField isEqualToString:[NSString stringWithFormat:@"%d", answer]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 2016-07-08
      • 2015-08-14
      相关资源
      最近更新 更多