【问题标题】:Appending zeros to the end of an NSString?将零添加到 NSString 的末尾?
【发布时间】:2013-10-24 05:11:11
【问题描述】:

我遇到了一些代码问题。我把它缩小到这个问题:首先,reverseString和2都是NSMutableStrings_input1_input2NSStrings,我正在尝试将零添加到最小的字符串,但它不能正常工作,这个是我得到的。 reverseString@"123",reverseString2 是 @"34567"

 //they get initialized back into the original strings
_input1=reversedString;
_input2=reversedString2;
//appends 0 to the shortest value
while ([_input1 length]>[_input2 length]){
    _input2=[_input2 stringByAppendingString:@"0"];
    _length=[_input1 length];
}
while ([_input1 length]<[_input2 length]){
    _input1=[_input1 stringByAppendingString:@"0"];
    _length=[_input2 length];
}

//converts the string to an NSArray
for (int i=0; i <([_input1 length]); i++) {
    NSString *TempStr = [_input1 substringWithRange:NSMakeRange(i, 1)];
    [one addObject:[TempStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}


for (int i=0; i <([_input2 length]); i++) {
    NSString *TempStr2 = [_input2 substringWithRange:NSMakeRange(i, 1)];
    [two addObject:[TempStr2 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}

现在我注意到,当它通过这个循环时,最小的一个,_input1,被设置为@"",而不是在末尾添加零。顺便说一句,这是在一个班级内。

这也是我收到的错误:

objc[2291]:方法缓存损坏。这可能是给无效对象的消息,或者是其他地方的内存错误。 objc[2291]:接收器 0x100300830,SEL 0x7fff8a689779,ISA 0x7fff727b8bd0,缓存 0x7fff727b8be0,桶 0x7fff89b9b09c,掩码 0x1,占用 0x0,包装桶 0x7fff89b9b09c
objc[2291]:接收器 0 字节,桶 0 字节
objc[2291]: 选择器“长度”
(lldb)

【问题讨论】:

  • 但是您的代码运行良好,问题出在哪里??
  • 所以你的意思是说在你的两个数组中它显示零对象对吗??
  • 您的代码对我来说运行良好。
  • @它不适合我???,我刚刚升级到 osx 小牛,你认为这可能是问题吗??我在升级之前一直在研究代码
  • @opj 我已经更新了代码请尝试相同的操作??

标签: ios objective-c nsstring nsarray nsmutablestring


【解决方案1】:

试试下面的代码

if([_input1 length] > [_input2 length])
{
   for (int i = 0 ; i < [_input1 length] - [_input2 length] ; i ++)
     _input2 = [_input2 stringByAppendingString:@"0"];
}
else
{
   for (int i = 0 ; i < [_input2 length] - [_input1 length] ; i ++)
     _input1 = [_input1 stringByAppendingString:@"0"];
}

【讨论】:

  • 它需要继续追加直到两者的长度相同
  • 你知道我的代码有什么问题吗?
  • 不,但我认为这是我的后续代码,我会做一个编辑给你看
  • 我需要它们的长度相等,所以当我将它们放入 NSArray 时,数组中的元素将是相等的
  • 对不起,我无法得到你。我的回答对你有帮助吗??
【解决方案2】:

试试这样:-

   NSString *input1=@"123";
   NSString * input2=@"34567";
    NSMutableArray *one=[NSMutableArray array];
        NSMutableArray *two=[NSMutableArray array];

    //appends 0 to the shortest value
    while ([input1 length]>[input2 length]){
        input2=[input2 stringByAppendingString:@"0"];
        //length=[input1 length];
    }
    while ([input1 length]<[input2 length]){
        input1=[input1 stringByAppendingString:@"0"];
       // length=[input2 length];
    }

    for (int i=0; i <([input1 length]); i++) {
        NSString *TempStr = [input1 substringWithRange:NSMakeRange(i, 1)];
        [one addObject:[TempStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    }

            NSLog(@"%ld",[one count]);
    for (int i=0; i <([input2 length]); i++) {
        NSString *TempStr2 = [input2 substringWithRange:NSMakeRange(i, 1)];
        [two addObject:[TempStr2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    }
                    NSLog(@"%ld",[two count]);

【讨论】:

  • 你能添加一些cmets吗?
  • 我不知道你为什么会得到@"" 但对我来说它工作正常。现在在上面的代码中,我刚刚将一个 api 替换为 stringByAddingPercentEscapesUsingEncoding。请尝试同样的方法??
  • 我会看到一点,我正在升级我的 xcode,也许那个代码是问题
【解决方案3】:

嗯,你的要求不是很清楚,但这是你提出的代码的更简洁的版本

NSString *string1 = @"foo";
NSString *string2 = @"foobar";

// Compute the desired length
NSUInteger length = MAX(string1.length, string2.length);
// We will pad using this string
NSString *paddingString = @"0";

// Pad both strings to the same length
string1 = [string1 stringByPaddingToLength:length withString:paddingString startingAtIndex:0];
string2 = [string2 stringByPaddingToLength:length withString:paddingString startingAtIndex:0];

// Build two arrays containing the characters, percent escaped
NSMutableArray *charactersArray1 = [NSMutableArray arrayWithCapacity:string1.length];
NSMutableArray *charactersArray2 = [NSMutableArray arrayWithCapacity:string2.length];
for (NSInteger i = 0; i < string1.length; i++) {
    [charactersArray1 addObject:[[string1 substringWithRange:(NSRange){ i, 1 }] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    [charactersArray2 addObject:[[string2 substringWithRange:(NSRange){ i, 1 }] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}
NSLog(@"String 1: %@\nString 2: %@", charactersArray1, charactersArray2);

结果是

字符串 1:[ f, o, o, 0, 0, 0 ]
字符串 2:[ f, o, o, b, a, r ]

【讨论】:

    【解决方案4】:

    我发现了我的问题,_input1 和 _input2 是错误的指针,我不得不修复它,抱歉所有的混乱,最后我让我的代码工作了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-11
      • 2011-01-05
      • 1970-01-01
      • 2021-12-28
      • 2013-08-07
      • 2013-02-14
      • 1970-01-01
      相关资源
      最近更新 更多