gpt4 book ai didi

objective-c - 为什么二进制搜索找不到我的字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:55 27 4
gpt4 key购买 nike

我有一个这样的有序 txt 文件:

aaa
bbb
ccc
ddd
eee

我想检查文件中是否存在“ddd”字符串...

这是我的函数:

- (BOOL) asd:(NSString*)sting 
{
NSArray *LinesCount =
[[NSString stringWithContentsOfFile:@"longfile.txt"
encoding:NSStringEncodingConversionAllowLossy error:nil]
componentsSeparatedByString:@"\r\n"];

unsigned index = (unsigned)CFArrayBSearchValues(
(CFArrayRef)LinesCount,
CFRangeMake(0, CFArrayGetCount((CFArrayRef)LinesCount)),
(CFStringRef)string,
(CFComparatorFunction)CFStringCompare,
NULL);
if (index < [LinesCount count]) return YES;
return NO;
}

为什么它总是返回 NO,带任何字符串?

最佳答案

问题在于您读取数组的方式。如果将分配 LineCount 的代码替换为

NSArray * LinesCount = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc", @"ddd", @"eee", nil];

您会看到二分查找执行得很好。

您的代码中有两个问题:

  • 如果文件是在 Mac OS X 上创建的,则行分隔符可能只是“\n”
  • 您的数组将包含一个遗留的“”,因为它是最后一个元素,因此不再满足 CFArrayBSearchValues 要求的排序要求。

举个例子:

 NSLog(@"%@", [@"one\ntwo\n" componentsSeparatedByString:@"\n"]);

产量(注意最后一个空元素):

 2011-09-29 16:52:33.024 a.out[4019:707] (
one,
two,
""
)

关于objective-c - 为什么二进制搜索找不到我的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7597984/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com