【问题标题】:Concatenating Two Integers [closed]连接两个整数
【发布时间】:2013-01-09 12:13:13
【问题描述】:

这可能是最简单的问题,但目前,我对如何实现这一点没有任何想法。

好的,问题是如何连接两个整数。

例如:我想使用两个不同的整数 0000 创建一个整数,比如说 0000。我尝试使用 NSString ,但失败了。

我的代码是:

                int num1 = 00;
                int num2 = 00;
                NSString *str = [NSString stringWithFormat:@"%d%d",num1,num2];
                int num = [str intValue];
                NSLog(@"num = %d",num); // It Logs 0 but I want 0000.

有人有更好的主意吗?

编辑:

请注意,我想用那个num来设置textfieldtag。这就是为什么所有 zeros 都是必不可少的。所以我的主要问题从这里开始。

我有一个包含自定义单元格的 tableview。这个自定义单元格10多个文本字段。现在我想唯一标识所有 textfields 进行编辑。这就是为什么该文本字段的 标签 必须是由 rowNumbertextFieldNumber 两个值连接的整数(表示 10 个中的哪个文本字段。)。

所以我的问题是我想做的是对还是错?如果没有,请给我一些有用的解决方案。

【问题讨论】:

  • 0000, 00 和 just 0 当你把它们当作整数时有什么区别?你真正在寻找什么?
  • 好吧,当您将@"0000" 转换为整数时,它需要0000=0。这将永远是一个特例。为什么不使用字符串 str 本身?
  • 我想用那个整数来设置textfield的标签。
  • 那行不通。 UIView 标签是整数,所以 0000 和 0 是同一个标签。
  • 谁能告诉我投反对票的原因?

标签: iphone ios objective-c integer concatenation


【解决方案1】:

整数数据类型(如int)只存储整数值,不存储格式信息。因此,您会丢失前导零的数量(不影响整数值,即 0、00 和 0000 是同一个整数:零)。

如果您希望保留格式信息,则必须单独存储。一种简单的方法是只存储字符串本身。或者,如果您总是希望具有相同的位数,则更改格式字符串:

int num1 = 0;
int num2 = 0;
NSString *str = [NSString stringWithFormat:@"%02d%02d",num1,num2];

在上面的代码之后,str 将是"0000"。但是,将其转换为int,然后使用%d 格式记录会再次生成0(因为0000 和0 是相同的整数)。

编辑:为了生成用于标记的唯一整数,给定行号 (rowNumber) 和文本字段号 (textFieldNumber),使用如下公式:

tagNumber = rowNumber * 100 + textFieldNumber;

这样,第 0 行的文本字段将有数字 0..99,第 1 行的文本字段将有 100..199,等等。如果每行需要超过 100 个文本字段,只需乘以更大的数字,像 1000。

在整数算术中,这些值可以通过以下方式转换回行号和字段号:

 rowNumber = tagNumber / 100;
 textFieldNumber = tagNumber % 100;

【讨论】:

  • 我想用这个数字来设置 textfield 的标签,这就是为什么我希望所有的零唯一地标识所有的文本字段。
  • @BhavinChitroda 为什么不用不同的数字标记文本字段,例如,0、1、2,...?
  • 文本字段位于具有自定义单元格的表格视图中,每个单元格有大约 10 个文本字段。因此,要跟踪所有文本字段,我需要将行号和文本字段编号存储在标签字段中。我认同。希望你能理解。
  • @BhavinChitroda rowNumber * 100 + textFieldNumber 怎么样?
  • 假设我的 textfieldnumber 大于 10 那么有没有发生碰撞的机会?
【解决方案2】:

尝试使用这个:

int num1 = 0;
int num2 = 0;
int num3=0;
int num4=0;
NSString *str = [NSString stringWithFormat:@"%d%d%d%d",num1,num2,num2,num3];
int num = [str intValue];
NSLog(@"num = %0*d",str.length,num);

希望对你有所帮助。

但不要像这样“int num1=00”初始化,因为它只在 num1 中初始化“0”。

【讨论】:

    【解决方案3】:

    为什么要把它变回int?您应该打印刚刚格式化的字符串:

    NSLog(@"num = %@",str);
    

    作为数字,0 和 0000 之间没有区别。整数只保留值,而不是格式(这就是字符串的用途)。

    【讨论】:

    • 但我想将其存储为整数。
    • 因为我认为只有使用 NSString 才可以使用 int。
    • 不能,0000 不是整数
    • 0000 是一个整数,但和 0 是同一个整数。
    • 我想用那个整数来设置文本字段的标签。我需要所有这些零来唯一标识文本字段。
    【解决方案4】:

    将第一个整数乘以 100 并将第二个整数加到它上面。您应该可以使用以下方式打印它:

    NSLog([NSString stringWithFormat:@"%04d", sum]);
    

    这将放置前导零。

    【讨论】:

      【解决方案5】:

      您可以将其填充为:

      注意:num1 和 num2 都必须是 2 位数字。如果它的大小增加,那么它将无法工作。

      int num1 = 00;
      int num2 = 00;
      NSString *str = [NSString stringWithFormat:@"%d%d",num1,num2];
      int num = [str intValue];
      NSLog(@"num = %04d",num);
      

      【讨论】:

      • 这两个数字都可能从 00 到 99。它还能用吗?
      • 然后我的代码将“daudega”(像魅力一样工作)。对于 99 和 99,它将显示 9999,如果这是您的要求
      • 如果我想为文本字段的标签存储 0000 那么...? (我认为它会将 0 存储为标签值,不是吗。)
      • 不...它将存储 0000。
      【解决方案6】:

      如果打印不是真正的问题,那么我想你需要一个乘数来设置标签 让它为 10000 并将其添加到某个序列号中以获得唯一的标签值。

      或者您可以使用 num 作为字符串并在 for 循环中乘以 10 num.length 次

      【讨论】:

        猜你喜欢
        • 2011-06-06
        • 1970-01-01
        • 2020-08-29
        • 2012-09-23
        • 1970-01-01
        • 1970-01-01
        • 2023-02-09
        • 2016-09-07
        相关资源
        最近更新 更多