int main() { char String[101]; scanf("%s", String); PrintDepth(String); return 0; }
void PrintCFDictionaryInternalFormatting(CFDictionaryRef dictionary, uint32_t depth) { CFIndex keyCount = CFDictionaryGetCount(dictionary); Pointer keys[keyCount]; Pointer values[keyCount]; CFDictionaryGetKeysAndValues(dictionary, PtrCast(keys,const void **), PtrCast(values,const void **)); for (uint32_t i = 0x0; i < keyCount; i++) { CFStringRef key = PtrCast(keys[i],CFStringRef); CFTypeRef value = PtrCast(values[i],CFTypeRef); PrintDepth(depth,"%s: ",(char *)CFStringGetCStringPtr(key,kCFStringEncodingUTF8)); PrintCFTypeInternalFormat(value, depth); } }
/*打印树,depth为根节点的初始化深度*/ void PrintTree(SearchTree T, int depth) { if(T == NULL) { perror("wrong tree"); exit(1); } if(T->lchild != NULL) PrintTree(T->lchild, depth+1); PrintDepth(T->Element, depth); if(T->rchild !=NULL) PrintTree(T->rchild, depth+1); }
void PrintCFTypeInternalFormat(CFTypeRef value, uint32_t depth) { bool foundType = false; CFStringRef valueType = CFCopyTypeIDDescription(CFGetTypeID(value)); CFStringRef dictionaryType = CFCopyTypeIDDescription(CFDictionaryGetTypeID()); if (CFStringCompare(valueType, dictionaryType, 0x0) == kCFCompareEqualTo) { foundType = true; printf("{\n"); PrintCFDictionaryInternalFormatting(value, depth+0x1); PrintDepth(depth,"}\n"); } CFSafeRelease(dictionaryType); CFStringRef booleanType = CFCopyTypeIDDescription(CFBooleanGetTypeID()); if (CFStringCompare(valueType, booleanType, 0x0) == kCFCompareEqualTo) { foundType = true; printf("%s\n",(CFBooleanGetValue(value) ? "True" : "False")); } CFSafeRelease(booleanType); CFStringRef stringType = CFCopyTypeIDDescription(CFStringGetTypeID()); if (CFStringCompare(valueType, stringType, 0x0) == kCFCompareEqualTo) { foundType = true; printf("%s\n",(char*)CFStringGetCStringPtr(value,kCFStringEncodingUTF8)); } CFSafeRelease(stringType); CFStringRef numberType = CFCopyTypeIDDescription(CFNumberGetTypeID()); if (CFStringCompare(valueType, numberType, 0x0) == kCFCompareEqualTo) { foundType = true; CFIndex numberType = CFNumberGetType(value); switch (numberType) { case kCFNumberSInt8Type: { SInt8 number; CFNumberGetValue(value, numberType, &number); printf("%hhd\n",number); break; }; case kCFNumberSInt16Type: { SInt16 number; CFNumberGetValue(value, numberType, &number); printf("%hd\n",number); break; }; case kCFNumberSInt32Type: { SInt32 number; CFNumberGetValue(value, numberType, &number); printf("%d\n",(int32_t)number); break; }; case kCFNumberSInt64Type: { SInt64 number; CFNumberGetValue(value, numberType, &number); printf("%lld\n",number); break; }; case kCFNumberFloat32Type: { Float32 number; CFNumberGetValue(value, numberType, &number); printf("%.f\n",number); break; }; case kCFNumberFloat64Type: { Float64 number; CFNumberGetValue(value, numberType, &number); printf("%.f\n",number); break; }; case kCFNumberCharType: { char number; CFNumberGetValue(value, numberType, &number); printf("%c\n",number); break; }; case kCFNumberShortType: { short number; CFNumberGetValue(value, numberType, &number); printf("%hd\n",number); break; }; case kCFNumberIntType: { int number; CFNumberGetValue(value, numberType, &number); printf("%d\n",number); break; }; case kCFNumberLongType: { long number; CFNumberGetValue(value, numberType, &number); printf("%ld\n",number); break; }; case kCFNumberLongLongType: { long long number; CFNumberGetValue(value, numberType, &number); printf("%qd\n",number); break; }; case kCFNumberFloatType: { float number; CFNumberGetValue(value, numberType, &number); printf("%.f\n",number); break; }; case kCFNumberDoubleType: { double number; CFNumberGetValue(value, numberType, &number); printf("%.f\n",number); break; }; case kCFNumberCFIndexType: { CFIndex number; CFNumberGetValue(value, numberType, &number); printf("%ld\n",number); break; }; case kCFNumberNSIntegerType: { NSInteger number; CFNumberGetValue(value, numberType, &number); printf("%ld\n",(long)number); break; }; case kCFNumberCGFloatType: { CGFloat number; CFNumberGetValue(value, numberType, &number); printf("%.f\n",number); break; }; default: { break; }; } } CFSafeRelease(numberType); CFStringRef arrayType = CFCopyTypeIDDescription(CFArrayGetTypeID()); if (CFStringCompare(valueType, arrayType, 0x0) == kCFCompareEqualTo) { foundType = true; CFIndex count = CFArrayGetCount(value); printf("[\n"); for (CFIndex i = 0x0; i < count; i++) { CFTypeRef item = CFArrayGetValueAtIndex(value, i); PrintDepth(depth+0x1,""); PrintCFTypeInternalFormat(item, depth+0x1); } PrintDepth(depth,"]\n"); } CFSafeRelease(arrayType); if (!foundType) { CFStringRef description = CFCopyDescription(value); printf("%s\n",(char*)CFStringGetCStringPtr(description,kCFStringEncodingUTF8)); CFSafeRelease(description); } CFSafeRelease(valueType); }
void PrintCFDictionaryInternalFormatting(CFDictionaryRef dictionary, uint32_t depth) { CFIndex keyCount = CFDictionaryGetCount(dictionary); Pointer keys[keyCount]; Pointer values[keyCount]; CFDictionaryGetKeysAndValues(dictionary, PtrCast(keys,const void**), PtrCast(values,const void**)); for (uint32_t i = 0x0; i < keyCount; i++) { CFStringRef key = PtrCast(keys[i],CFStringRef); CFTypeRef value = PtrCast(values[i],CFTypeRef); PrintDepth(depth,"%s: ",(char*)CFStringGetCStringPtr(key,kCFStringEncodingUTF8)); CFStringRef valueType = CFCopyTypeIDDescription(CFGetTypeID(value)); if (CFStringCompare(valueType, CFCopyTypeIDDescription(CFDictionaryGetTypeID()), 0x0) == kCFCompareEqualTo) { printf("\n"); PrintCFDictionaryInternalFormatting(value, depth+0x1); printf("\n"); } if (CFStringCompare(valueType, CFCopyTypeIDDescription(CFBooleanGetTypeID()), 0x0) == kCFCompareEqualTo) { printf("%s\n",(CFBooleanGetValue(value) ? "True" : "False")); } if (CFStringCompare(valueType, CFCopyTypeIDDescription(CFStringGetTypeID()), 0x0) == kCFCompareEqualTo) { printf("%s\n",(char*)CFStringGetCStringPtr(value,kCFStringEncodingUTF8)); } if (CFStringCompare(valueType, CFCopyTypeIDDescription(CFNumberGetTypeID()), 0x0) == kCFCompareEqualTo) { CFIndex numberType = CFNumberGetType(value); switch (numberType) { case kCFNumberSInt8Type: { SInt8 number; CFNumberGetValue(value, numberType, &number); printf("%hhd\n",number); break; }; case kCFNumberSInt16Type: { SInt16 number; CFNumberGetValue(value, numberType, &number); printf("%hd\n",number); break; }; case kCFNumberSInt32Type: { SInt32 number; CFNumberGetValue(value, numberType, &number); printf("%dz\n",number); break; }; case kCFNumberSInt64Type: { SInt64 number; CFNumberGetValue(value, numberType, &number); printf("%lldz\n",number); break; }; case kCFNumberFloat32Type: { Float32 number; CFNumberGetValue(value, numberType, &number); printf("%.f\n",number); break; }; case kCFNumberFloat64Type: { Float64 number; CFNumberGetValue(value, numberType, &number); printf("%.f\n",number); break; }; case kCFNumberCharType: { char number; CFNumberGetValue(value, numberType, &number); printf("%c\n",number); break; }; case kCFNumberShortType: { short number; CFNumberGetValue(value, numberType, &number); printf("%hd\n",number); break; }; case kCFNumberIntType: { int number; CFNumberGetValue(value, numberType, &number); printf("%dz\n",number); break; }; case kCFNumberLongType: { long number; CFNumberGetValue(value, numberType, &number); printf("%ldz\n",number); break; }; case kCFNumberLongLongType: { long long number; CFNumberGetValue(value, numberType, &number); printf("%qdz\n",number); break; }; case kCFNumberFloatType: { float number; CFNumberGetValue(value, numberType, &number); printf("%.f\n",number); break; }; case kCFNumberDoubleType: { double number; CFNumberGetValue(value, numberType, &number); printf("%.f\n",number); break; }; case kCFNumberCFIndexType: { CFIndex number; CFNumberGetValue(value, numberType, &number); printf("%ldz\n",number); break; }; case kCFNumberNSIntegerType: { NSInteger number; CFNumberGetValue(value, numberType, &number); printf("%ldz\n",number); break; }; case kCFNumberCGFloatType: { CGFloat number; CFNumberGetValue(value, numberType, &number); printf("%.f\n",number); break; }; default: { break; }; } } } }