比较,排序,搜索字符串对象( Comparing, Sorting, and Searching String Objects )CFString

发布时间:2017-3-28 23:56:04 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"比较,排序,搜索字符串对象( Comparing, Sorting, and Searching String Objects )CFString",主要涉及到比较,排序,搜索字符串对象( Comparing, Sorting, and Searching String Objects )CFString方面的内容,对于比较,排序,搜索字符串对象( Comparing, Sorting, and Searching String Objects )CFString感兴趣的同学可以参考一下。

核心基础字符串对象包含一系列的字符串搜索,对比两个字符串的函数。因为这些操作是语义相关的,每个操作的主要的函数并不奇怪。CFStringFindWithOptions和CFStringCompareWithOptions-有相同的参数。开始的四个参数几乎相同;两个CFString对象的引用(比较的两个字符串或者在主要字符串中查找的子串),包含在操作中得一个字符范围,和一个指定选项的位掩码。如果你对字符串排序表现给用户,你应当使用CFStringCompareWithOptionsAndLocale和用户的本地做本地化比较。 比较和搜索字符串 尽管CFStringFindWithOptions和CFStringCompareaWithOptions有相同的特点,它们也有重要的不同。CFStringCompareWithOptions函数返回一个Comparison Results类型的结果;这个枚举常量表明是否比较的两个字符串相等或者第一个指定字符串大于或者小于第二个字符串。CFStringFindWithOptions函数,换句话说,返回一个Boolean结果,表明这个操作是否成功。此函数通过最后一个参数间接返回的更有用的结果是一个范围指针(一个CFRange结构类型);这个方位包括找到的字符串在主要字符串中得位置。 列表1  阐述了如何使用CFStringCompareWithOption和CFStringFindWithOption 在这个例子中,查找和比较函数都指定了kCFCompareCaseInsensitive标志作为操作选项,导致在这种情况下它忽略不同之处。其他可用的选项标志,包括kCFCompareBackwards(从字符串的末尾开始操作),kCFCompareNumerically(比较类似的字符串包含数字字符串数值),和kCFCompareLocalized(使用用户默认位置进行此操作) 列表1      比较和查找字符串内容 void compareAndSearchStringExample() {     CFStringRef str1 = CFSTR("ABCDEFG");     CFStringRef str2 = CFSTR("abcdefg");     CFStringRef str3 = CFSTR("Kindergarten is the time to start teaching the ABCDEFG's");     CFRange foundRange;     CFComparisonResult result;          result = CFStringCompareWithOptions(str1, str2, CFRangeMake(0,CFStringGetLength(str1)), kCFCompareCaseInsensitive);     if (result == kCFCompareEqualTo) {         show(CFSTR("%@ is the same as %@"), str1, str2);     }else{         show(CFSTR("%@ is not the same as %@"), str1, str2);     }          if (CFStringFindWithOptions(str3, str1, CFRangeMake(0, CFStringGetLength(str3)), kCFCompareCaseInsensitive, &foundRange)) {         show(CFSTR("The string \"%@\" was fount at index %d in string \"%@\"."),str1,foundRange.location,str3);     }else{         show(CFSTR("The string \"%@\" was  not fount  in string \"%@\"."),str1,str3);     } } 默认的,基本CFString对象比较是逐个字符进行比较。在一些情况中可能没有给你想要的结果,自从一些字符可以被多种不同的方式呈现(举个例子,“ö”可以被两种有区别的字符(“o”和“umlaut”)或者用一个字符(“o-umlaut”))如果你允许宽松的等效,使用搜索或者比较函数时定义kCFCompareNonliteral选项。注意,如果你不指定一个non-literal比较,查找函数返回的长度位置可能跟查找字符串的长度不一致。 除了主要的比较和查找函数,字符串对象提供一些方便的函数。CFStringFind和CFStringCompare跟主要的比较和查找字符串函数比较相似,但是他们不需要指定范围参数(默认指定整个字符串)。你可以使用CFStringCompare在CoreFoundation的任何地方当一个函数指针要求遵循CFComparatorFunction类型。 另一些字符串对象搜索和比较函数是CFStringHasPrefix,CFStringHasSuffix,CFStringCreateArrayWithFindResults。最后一个函数当你希望搜索结果是多个时是有用的;它返回一个CFRange结构数组,每一个指定搜索结果在主字符串的位置。 字符串排序 如果你对字符串排序并且将结果呈现在用户面前,你需要确认你使用用户的位置执行了一个本地的比较。你可能想排序字符串跟Finder中出现的一样,举个例子,这些字符串{“string 12”,"string 1","string 22","string 02"}排序后:{"string 1","string 02","string 12","string 22"} 为了达到这个母的,你可以使用CFStringCompareWithOptionsAndLocale,附加选项:kCFCompareCaseInsensitive,kCFCompareNonliteral,kCFCompareLocalized,kCFCompareNumerically,kCFCompareWidthInsensitive和kCFCompareForcedOrdering。第一步,实现一个函数来执行适当的比较: CFComparisonResult compareStringLikeFinderWithLocal(const void* string1 ,const void* string2,void* locale) {     static CFOptionFlags compareOptions = kCFCompareCaseInsensitive|     kCFCompareNonliteral|kCFCompareLocalized|kCFCompareNumerically|kCFCompareWidthInsensitive|kCFCompareForcedOrdering;     CFRange string1Range = CFRangeMake(0, CFStringGetLength(string1));     return CFStringCompareWithOptionsAndLocale(string1, string2, string1Range, compareOptions, locale);      } 然后用下面的函数实施这个比较 CFMutableArrayRef theArray = CFArrayCreateMutable(kCFAllocatorDefault, 4, NULL);     CFArrayAppendValue(theArray, CFSTR("String12"));     CFArrayAppendValue(theArray, CFSTR("String1"));     CFArrayAppendValue(theArray, CFSTR("String22"));     CFArrayAppendValue(theArray, CFSTR("String02"));          CFRange arrayRange = CFRangeMake(0, CFArrayGetCount(theArray));     CFLocaleRef locale = CFLocaleCopyCurrent();          CFArraySortValues(theArray, arrayRange, compareStringLikeFinderWithLocal, (void*)locale);

上一篇:计算机各种语言经典书籍必看
下一篇:C++中的类模板详细讲述

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款