UI:通讯录实现
阅读原文时间:2021年08月12日阅读:1

通讯录实现草图:

代码:

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------
#import

@interface AppDelegate : UIResponder

@property (retain, nonatomic) UIWindow *window;

@end
#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "AppDelegate.h"
#import "ContactListViewController.h"
#import "MainNavigationController.h"
#import "FirstLaunchViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate

  • (void)dealloc {
    [_window release];
    [super dealloc];
    }

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    //判断是否第一次安装启动
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    //如果是 则指定用户引导页为window的根视图控制器
    if (![defaults boolForKey:@"firstLaunch"]) {
    FirstLaunchViewController *firstVC = [[FirstLaunchViewController alloc] init];
    self.window.rootViewController = firstVC;
    [firstVC release];
    } else {
    //否则,进入程序的主页面
    //设置根视图控制器
    ContactListViewController *mainVC = [[ContactListViewController alloc] initWithStyle:UITableViewStylePlain];
    //创建导航控制器
    MainNavigationController *navi = [[MainNavigationController alloc] initWithRootViewController:mainVC];
    //指定为window的根视图控制器
    self.window.rootViewController = navi;
    //释放所有权
    [mainVC release];
    [navi release];
    }

    return YES;
    }

AppDelegate文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------
#import
#import "Contact.h"
#import

@interface AddressBookHelper : NSObject

//提供相应的方法给对应的controller

  • (NSInteger)numberOfSection; //返回分区个数

  • (NSInteger)numberOfRowsInSection:(NSInteger)section; //返回对应分区的行数

  • (NSString *)titleForHeaderInSection:(NSInteger)section;//返回对应分区的title

  • (NSArray *)sectionIndexTitles; //返回右侧索引标题

//delete

  • (BOOL)isNeedToDeleteWholeSection:(NSInteger)section; //是否删除整个分区

  • (void)deleteWholeSection:(NSInteger)section;//删除整个分区

  • (void)deleteRowAtIndexPath:(NSIndexPath *)indexPath; //删除一行

//move

  • (void)moveFromIndexPath:(NSIndexPath *)sourceIndexPath ToIndexPath:(NSIndexPath *)destinationIndexPath;

//返回对应行所需的联系人

  • (Contact *)contactAtIndexPath:(NSIndexPath *)indexPath;

//添加联系人

  • (void)addContact:(Contact *)newContact;

//保存数据

  • (void)saveData;

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------

/**
* AddressBookHelper 是通讯录列表界面的助手类,帮助列表界面做数据处理相关的内容,为ContactListViewController瘦身,该类可有可无。
M层的类:和数据有关的类。数据解析类,数据请求类,数据本地化类。
*/

#define kPlistName @"contacts"

#import "AddressBookHelper.h"
#import "NSString+Addition.h"

@interface AddressBookHelper ()
@property (nonatomic, retain) NSMutableDictionary *dataSource;//存储外层信息的大字典
@property (nonatomic, retain) NSMutableArray *sortedKeys;//存储排好序的key
@end

@implementation AddressBookHelper
static AddressBookHelper *helper;
//单例方法

  • (AddressBookHelper *)defaultHelper {
    //安全处理 保证多线程下的安全
    @synchronized(self) {
    if (!helper) {
    helper = [[AddressBookHelper alloc] init];
    [helper readDataFromPlist];//读取本地plist文件
    }
    }
    return helper;
    }

//获取本地文件

  • (void)readDataFromPlist {
    //1.读取本地文件 并获取其中的字典信息
    NSString *filePath = [[NSBundle mainBundle] pathForResource:kPlistName ofType:@"plist"];
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
    self.dataSource = [NSMutableDictionary dictionaryWithCapacity:dict.count];

    //2.1遍历字典 得到key
    for (NSString *key in dict) {
    //2.2通过key 获取联系人分组数组
    NSArray *group = dict[key];
    //2.3创建一个可变数组 存放联系人对象
    NSMutableArray *perArr = [NSMutableArray arrayWithCapacity:group.count];
    //2.4遍历分组数组 得到联系人信息小字典
    for (NSDictionary *dic in group) {
    //2.5将小字典信息封装成对象 存放到数组中
    Contact *contact = [[Contact alloc] initWithDic:dic];
    [perArr addObject:contact];
    [contact release];
    }
    //将存放对象的数组及其对应key 存放到字典中
    [self.dataSource setObject:perArr forKey:key];
    }
    //获取排好序的key
    NSArray *sortedArr = [[_dataSource allKeys] sortedArrayUsingSelector:@selector(compare:)];
    self.sortedKeys = [NSMutableArray arrayWithArray:sortedArr];
    }

//返回分区个数

  • (NSInteger)numberOfSection {
    return [self defaultHelper].dataSource.count;
    // return [self defaultHelper].sortedKeys.count;
    }
    //返回对应分区的行数
  • (NSInteger)numberOfRowsInSection:(NSInteger)section {
    return [helper.dataSource[helper.sortedKeys[section]] count];
    }
    //返回对应分区的title
  • (NSString *)titleForHeaderInSection:(NSInteger)section {
    return helper.sortedKeys[section];
    }
    //返回右侧索引标题
  • (NSArray *)sectionIndexTitles {
    return helper.sortedKeys;
    }
    //delete
    //是否删除整个分区
  • (BOOL)isNeedToDeleteWholeSection:(NSInteger)section {
    //获取对应分组的联系人数组
    NSArray *group = helper.dataSource[helper.sortedKeys[section]];
    //如果该分组元素个数为1 代表只有一人
    if (group.count == ) {
    return YES;//则需要删除整个分区
    }
    return NO;//否则,不需要
    }
    //删除整个分区
  • (void)deleteWholeSection:(NSInteger)section {
    //1.获取对应的key
    NSString *key = helper.sortedKeys[section];
    //2.从字典删除key对应的分组数组
    [helper.dataSource removeObjectForKey:key];
    //3.从排好序的key数组中移除该key值
    [helper.sortedKeys removeObject:key];
    }

//删除一行

  • (void)deleteRowAtIndexPath:(NSIndexPath *)indexPath {
    //1.获取对应的分组
    NSMutableArray *group = helper.dataSource[helper.sortedKeys[indexPath.section]];
    //2.从对应分组中移除该元素
    [group removeObjectAtIndex:indexPath.row];
    }

//move

  • (void)moveFromIndexPath:(NSIndexPath *)sourceIndexPath ToIndexPath:(NSIndexPath *)destinationIndexPath {
    //获取对应分组数组
    NSMutableArray *group = helper.dataSource[helper.sortedKeys[sourceIndexPath.section]];
    //获取对应的联系人
    Contact *contact = [group[sourceIndexPath.row] retain];
    //从对应位置删除
    [group removeObjectAtIndex:sourceIndexPath.row];
    //插入到最新的位置
    [group insertObject:contact atIndex:destinationIndexPath.row];
    //释放所有权
    [contact release];
    }

//返回对应行所需的联系人

  • (Contact *)contactAtIndexPath:(NSIndexPath *)indexPath {
    return helper.dataSource[helper.sortedKeys[indexPath.section]][indexPath.row];
    }

//添加联系人

  • (void)addContact:(Contact *)newContact {
    //1.获取联系人姓名 转化为拼音 并取姓名首字母的大写
    NSString *key = [newContact.name firstCharacter];
    //安全处理 判断key是否存在
    if (!key) {
    return;
    }
    //2.获取分组的数组
    NSMutableArray *group = helper.dataSource[key];
    //3.如果该分组不存在 则建立该分组
    if (!group) {
    group = [NSMutableArray array];
    //新建分组 添加到字典中
    [helper.dataSource setObject:group forKey:key];
    //对应分组的key添加到对应数组中,并排序
    [helper.sortedKeys addObject:key];
    [helper.sortedKeys sortUsingSelector:@selector(compare:)];
    }
    //存在该分组,则直接把联系人添加到数组中
    [group addObject:newContact];
    }

  • (void)saveData {
    #warning 待完善
    }

  • (void)dealloc {
    self.dataSource = nil;
    self.sortedKeys = nil;
    [super dealloc];
    }

@end

AddressBookHelper文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------

#import

@interface UIColor (Addition)

  • (UIColor *)lightGreenColor;

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "UIColor+Addition.h"

@implementation UIColor (Addition)

  • (UIColor *)lightGreenColor {
    return [self colorWithRed: / 255.0 green: / 255.0 blue: / 255.0 alpha:1.0];
    }

@end

UIColor+Addition文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------

#import

@interface NSString (Addition)

  • (NSString *)chineseToPinYin;

  • (NSString *)firstCharacter;

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "NSString+Addition.h"
#import "ChineseToPinyin.h"
@implementation NSString (Addition)
//中文转拼音

  • (NSString *)chineseToPinYin {
    return [ChineseToPinyin pinyinFromChiniseString:self];
    }
    //获取字符串的首字符
  • (NSString *)firstCharacter {
    return [[[self chineseToPinYin] substringToIndex:] uppercaseString];
    }
    @end

NSString+Addition文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------
#import

@interface MainNavigationController : UINavigationController

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "MainNavigationController.h"
#import "UIColor+Addition.h"

@interface MainNavigationController ()

@end

@implementation MainNavigationController

  • (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self configureNavigationBar];
    }
    //配置导航条公共的属性

  • (void)configureNavigationBar {
    //导航条渲染颜色
    self.navigationBar.barTintColor = [UIColor lightGreenColor];
    //导航条的内容渲染颜色
    self.navigationBar.tintColor = [UIColor whiteColor];
    //导航条文字属性
    self.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor]};
    }

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

@end

MainNavigationController文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------

#import

@interface FirstLaunchViewController : UIViewController

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#define FIRST @"firstLaunch"

#define kImageCount 4
#define kPictureName @"information"
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
#define kScrollTag 111
#define kPageControlTag 222
#import "FirstLaunchViewController.h"
#import "ContactListViewController.h"
#import "MainNavigationController.h"
@interface FirstLaunchViewController ()

@end

@implementation FirstLaunchViewController

  • (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //布局子视图
    [self layoutSubviews];
    }

  • (void)layoutSubviews {
    [self setUpScrollView];//布局scrollView
    [self setUpPageControl];//布局pageControl
    }

  • (void)setUpScrollView {
    UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    scroll.tag = kScrollTag;
    //设置内容区域大小
    scroll.contentSize = CGSizeMake(kScreenWidth * kImageCount, kScreenHeight);
    //整页滑动
    scroll.pagingEnabled = YES;
    //不显示水平滚动条
    scroll.showsHorizontalScrollIndicator = NO;
    //设置代理
    scroll.delegate = self;
    [self.view addSubview:scroll];
    [scroll release];
    //放置引导图片
    for (int i = ; i < kImageCount; i++) {
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(kScreenWidth * i, , kScreenWidth, kScreenHeight)];

    \[imageView setImage:\[UIImage imageNamed:\[\[NSBundle mainBundle\] pathForResource:\[NSString stringWithFormat:@"%@%02d@2x", kPictureName, i + \] ofType:@"png"\]\]\];  
    \[scroll addSubview:imageView\];  
    \[imageView release\];  
    //最后一张添加轻拍手势  
    if (i == kImageCount - ) {  
        UITapGestureRecognizer \*tap = \[\[UITapGestureRecognizer alloc\] initWithTarget:self action:@selector(handleTap:)\];  
        \[imageView addGestureRecognizer:tap\];  
        //打开imageView的用户交互  
        imageView.userInteractionEnabled = YES;  
        \[tap release\];  
    }

    }
    }

  • (void)setUpPageControl {
    UIPageControl *pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake((kScreenWidth - ) / , kScreenHeight - , , )];
    pageControl.tag = kPageControlTag;
    //设置总页数
    pageControl.numberOfPages = kImageCount;
    pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];//其余页点的颜色
    pageControl.currentPageIndicatorTintColor = [UIColor orangeColor];//当前页点的颜色
    [self.view addSubview:pageControl];
    [pageControl release];
    }

#pragma -UIScrollViewDelegate-

  • (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    UIPageControl *page = (UIPageControl *)[self.view viewWithTag:kPageControlTag];
    page.currentPage = scrollView.contentOffset.x / kScreenWidth;
    }

#pragma mark -轻拍进入程序主页面-

  • (void)handleTap:(UITapGestureRecognizer *)tap {
    //当点击最后一张时,意味着用户引导页已结束。将对应的key保存到 NSUserDefaults
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
    [user setBool:YES forKey:FIRST];
    //立即更新(同步),立即执行保存操作
    [user synchronize];
    //进入程序主界面
    ContactListViewController *mainVC = [[ContactListViewController alloc] init];
    MainNavigationController *navi =[[MainNavigationController alloc] initWithRootViewController:mainVC];
    //更改window的根视图控制器 为主界面的视图控制器mainVC
    [UIApplication sharedApplication].keyWindow.rootViewController = navi;
    [mainVC release];
    [navi release];

}

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

@end

FirstLaunchViewController文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------
#import

@interface AddContactViewController : UIViewController

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "AddContactViewController.h"
#import "AddContactView.h"
#import "AddressBookHelper.h"
@interface AddContactViewController ()

@end

@implementation AddContactViewController

//重写loadView 指定根视图

  • (void)loadView {
    AddContactView *add = [[AddContactView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.view = add;
    [add release];
    }

  • (void)customizedNaviBar {
    self.navigationItem.title = @"添加联系人";
    //left
    UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"clsose"] style:UIBarButtonItemStylePlain target:self action:@selector(handleClose:)];
    self.navigationItem.leftBarButtonItem = left;
    [left release];
    //right
    UIBarButtonItem *right = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"doneR"] style:UIBarButtonItemStylePlain target:self action:@selector(handleDone:)];
    self.navigationItem.rightBarButtonItem = right;
    [right release];

}

  • (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self customizedNaviBar];
    [self addTapGesture];//添加轻拍手势
    }

  • (void)addTapGesture {
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [((AddContactView *)self.view).avaterView addGestureRecognizer:tap];
    [tap release];
    }
    //设置头像

  • (void)handleTap:(UITapGestureRecognizer *)tap {
    //调用系统相机或图库
    UIActionSheet *myActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照",@"从相册中选取", nil];
    [myActionSheet showInView:self.view];
    [myActionSheet release];
    }

  • (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
    //呼出的菜单按钮点击后的响应
    if (buttonIndex == actionSheet.cancelButtonIndex)
    {
    NSLog(@"取消");
    }else{
    //相机可用时初始化 pikerController为UIImagePickerControllerSourceTypeCamera
    UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
    switch (buttonIndex)
    {
    case : //打开照相机拍照
    sourceType = UIImagePickerControllerSourceTypeCamera;
    break;

        case :  //打开本地相册  
            sourceType = UIImagePickerControllerSourceTypePhotoLibrary;  
            break;  
    }  
    if (!\[UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera\])  
    {  
        //如果源类型 UIImagePickerControllerSourceTypeCamera 不可用时 设置UIImagePickerControllerSourceTypePhotoLibrary 为源类型  
        sourceType = UIImagePickerControllerSourceTypePhotoLibrary;  
    }  
    UIImagePickerController \*picker = \[\[UIImagePickerController alloc\] init\];//初始化  
    picker.delegate = self;  
    picker.allowsEditing = YES;//设置可编辑  
    picker.sourceType = sourceType;  
    \[self presentViewController:picker animated:YES completion:nil\];//进入照相界面或相册界面  
    \[picker release\];  

    }
    }

  • (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    ((AddContactView *)self.view).avaterView.image = [info objectForKey:UIImagePickerControllerEditedImage];//use编辑后的照片;
    [self dismissViewControllerAnimated:YES completion:nil];
    }

#pragma mark - handle Action -
//关闭 放弃保存

  • (void)handleClose:(UIBarButtonItem *)item {
    //判断 提示用户
    //if (//用户已添加编辑 ) {
    //提示用户是否放弃
    // }
    [self dismissViewControllerAnimated:YES completion:nil];
    }
    //添加完成 保存
  • (void)handleDone:(UIBarButtonItem *)item {
    AddContactView *view = (AddContactView *)self.view;
    NSString *name = view.nameTF.text;
    NSString *number = view.phoneNumTF.text;
    //判断
    if (name.length == || number.length == ) {
    return;
    }
    //创建联系人对象
    Contact *contact = [[Contact alloc] init];
    contact.name = name;
    contact.phoneNum = number;
    //添加联系人
    [AddressBookHelper addContact:contact];
    //返回
    [self dismissViewControllerAnimated:YES completion:nil];

}

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

@end

AddContactViewController文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------
#import

@interface AddContactView : UIView
@property (nonatomic, retain) UITextField *nameTF;//姓名
@property (nonatomic, retain) UITextField *genderTF;//性别
@property (nonatomic, retain) UITextField *phoneNumTF;//电话号码

@property (nonatomic, retain) UIImageView *avaterView;//头像

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "AddContactView.h"
#import "UIColor+Addition.h"

@implementation AddContactView

  • (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
    self.backgroundColor = [UIColor whiteColor];
    [self setUpViews];
    }
    return self;
    }
    //布局子视图

  • (void)setUpViews {
    //头像
    self.avaterView = [[UIImageView alloc] initWithFrame:CGRectMake(, , , )];
    _avaterView.image = [UIImage imageNamed:@"green_avatarEmpty"];
    _avaterView.userInteractionEnabled = YES;
    _avaterView.layer.cornerRadius = ;
    _avaterView.layer.masksToBounds = YES;
    [self addSubview:_avaterView];
    [_avaterView release];

    //姓名
    self.nameTF = [[UITextField alloc] initWithFrame:CGRectMake(, , , )];
    _nameTF.backgroundColor = [UIColor lightGrayColor];
    _nameTF.placeholder = @"姓名";
    _nameTF.textColor = [UIColor lightGreenColor];
    [self addSubview:_nameTF];
    [_nameTF release];

    //性别
    self.genderTF = [[UITextField alloc] initWithFrame:CGRectMake(, , , )];
    _genderTF.placeholder = @"性别";
    _genderTF.backgroundColor = [UIColor lightGrayColor];
    _genderTF.textColor = [UIColor lightGreenColor];
    [self addSubview:_genderTF];
    [_genderTF release];

    //电话号码
    self.phoneNumTF = [[UITextField alloc] initWithFrame:CGRectMake(, , self.frame.size.width - , )];
    _phoneNumTF.backgroundColor = [UIColor lightGrayColor];
    _phoneNumTF.placeholder = @"手机号";
    _phoneNumTF.textColor = [UIColor lightGreenColor];
    [self addSubview:_phoneNumTF];
    [_phoneNumTF release];

}

@end

AddContactView文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------

#import

@interface ContactListViewController : UITableViewController

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "ContactListViewController.h"
#import "AddressBookHelper.h"
#import "Contact.h"
#import "AddContactViewController.h"
#import "MainNavigationController.h"
#import "DetailViewController.h"
#import "CustomContactCell.h"
#import "UIColor+Addition.h"
@interface ContactListViewController ()
@property (nonatomic, retain) UIWebView *webView;
@end

@implementation ContactListViewController

//重新刷新数据

  • (void)viewWillAppear:(BOOL)animated {
    [self.tableView reloadData];//重新加载数据
    }

  • (void)viewDidLoad {
    [super viewDidLoad];
    [self customizedNaviBar];//个性化配置该界面的导航条
    self.tableView.rowHeight = ;//行高
    self.tableView.sectionIndexColor = [UIColor lightGreenColor];//索引标题颜色
    //注册cell
    [self.tableView registerClass:[CustomContactCell class] forCellReuseIdentifier:@"reuse"];
    }

  • (void)customizedNaviBar {
    self.navigationItem.title = @"HHH手机通讯录";
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"add_contact"] style:UIBarButtonItemStylePlain target:self action:@selector(handleAdd:)];
    self.navigationItem.leftBarButtonItem = left;
    [left release];

}

#pragma mark - handleAdd -
//模态进入添加联系人界面

  • (void)handleAdd:(UIBarButtonItem *)left {
    AddContactViewController *addVC = [[AddContactViewController alloc] init];
    MainNavigationController *mainVC = [[MainNavigationController alloc] initWithRootViewController:addVC];
    [self presentViewController:mainVC animated:YES completion:^{

    }];
    [addVC release];
    [mainVC release];

}

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    if ([self isViewLoaded] && !self.view.window) {
    self.view = nil;
    }
    }

#pragma mark - Table view data source

  • (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    //通过助手类 返回分区的个数
    return [AddressBookHelper numberOfSection];
    }

  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    //通过助手类 返回分区的行数
    return [AddressBookHelper numberOfRowsInSection:section];
    }

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomContactCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuse" forIndexPath:indexPath];

    // Configure the cell…
    Contact *contact = [AddressBookHelper contactAtIndexPath:indexPath];
    //cell控件赋值
    //第1种方式.
    // [cell configureCell:contact];
    //第2种方式. setter方法完成赋值操作
    cell.contact = contact;

    //设置代理对象 完成拨打电话
    cell.delegate = self;
    cell.indexPath = indexPath;
    return cell;
    }

  • (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return [AddressBookHelper titleForHeaderInSection:section];
    }
    //右侧的索引标题

  • (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    return [AddressBookHelper sectionIndexTitles];
    }

// Override to support conditional editing of the table view.

  • (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
    }

// Override to support editing the table view.

  • (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
    // Delete the row from the data source
    if ([AddressBookHelper isNeedToDeleteWholeSection:indexPath.section]) {
    //数据
    [AddressBookHelper deleteWholeSection:indexPath.section];
    //UI界面
    [tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationLeft];
    } else {
    //数据
    [AddressBookHelper deleteRowAtIndexPath:indexPath];
    //UI界面
    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
    // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }
    }

//移动操作
// Override to support rearranging the table view.

  • (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    //调用助手类 完成对应的移动操作
    [AddressBookHelper moveFromIndexPath:fromIndexPath ToIndexPath:toIndexPath];
    }

// Override to support conditional rearranging of the table view.

  • (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
    }
    //限制移动范围 禁止跨区移动
  • (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
    if (sourceIndexPath.section == proposedDestinationIndexPath.section) {
    return proposedDestinationIndexPath;
    }
    return sourceIndexPath;
    }

#pragma mark - UITableViewDelegate -
//点击进入详情页面

  • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //push进入联系人详情页
    DetailViewController *detailVC = [[DetailViewController alloc] init];
    //(属性)传值 把对应的联系人传递到详情页
    Contact *contact = [AddressBookHelper contactAtIndexPath:indexPath];
    //在push之前给属性赋值
    detailVC.contact = contact;

    [self.navigationController pushViewController:detailVC animated:YES];
    [detailVC release];
    }

#pragma mark - MakeACallDelegate -
//拨打电话

  • (void)dial:(NSIndexPath *)indexPath {
    NSLog(@"%@", indexPath);
    Contact *contact = [AddressBookHelper contactAtIndexPath:indexPath];
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", contact.phoneNum]]]];
    }

//懒加载 何时使用 何时创建

  • (UIWebView *)webView {
    if (!_webView) {
    self.webView = [[UIWebView alloc] init];
    [self.view addSubview:_webView];
    [_webView release];
    }
    return [[_webView retain] autorelease];
    }

@end

ContactListViewController文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------
#import
#import

@interface Contact : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *gender;
@property (nonatomic, copy) NSString *phoneNum;
@property (nonatomic, copy) NSString *photo;

@property (nonatomic, retain) UIImage *photoView;

  • (instancetype)initWithDic:(NSDictionary *)dic;

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "Contact.h"

@implementation Contact

  • (instancetype)initWithDic:(NSDictionary *)dic {
    self = [super init];
    if (self) {
    [self setValuesForKeysWithDictionary:dic];
    self.photoView = [UIImage imageNamed:dic[@"photo"]];
    }
    return self;
    }

  • (void)setValue:(id)value forUndefinedKey:(NSString *)key {
    NSLog(@"错误处理");
    }

  • (void)dealloc {
    self.name = nil;
    self.gender = nil;
    self.phoneNum = nil;
    self.photo = nil;
    [super dealloc];
    }

@end

Contact文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------
#import
@class Contact;

//为callBtn制定协议方法 实现拨打电话
@protocol MakeACallDelegate

  • (void)dial:(NSIndexPath *)indexPath;

@end

@interface CustomContactCell : UITableViewCell
@property (nonatomic, retain) UIImageView *photoView;
@property (nonatomic, retain) UILabel *nameLabel;
@property (nonatomic, retain) UILabel *phoneLabel;
@property (nonatomic, retain) UIButton *callBtn;

@property (nonatomic, retain) NSIndexPath *indexPath;//存储当前点击的cell的索引

@property (nonatomic, assign) iddelegate;

//2.声明一个联系人对象的属性
@property (nonatomic, retain) Contact *contact;

////1.为cell上的控件赋值
//- (void)configureCell:(Contact *)contact;

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------

#import "CustomContactCell.h"
#import "Contact.h"

@implementation CustomContactCell

  • (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
    //布局子控件
    [self.contentView addSubview:self.photoView];
    [self.contentView addSubview:self.nameLabel];
    [self.contentView addSubview:self.phoneLabel];
    [self.contentView addSubview:self.callBtn];
    }
    return self;
    }

#pragma lazy loading 实现控件的创建
//重写getter方法

  • (UIImageView *)photoView {
    if (!_photoView) {
    self.photoView = [[[UIImageView alloc] initWithFrame:CGRectMake(, , , )] autorelease];
    _photoView.layer.cornerRadius = 5.0;
    _photoView.layer.masksToBounds = YES;
    }
    return [[_photoView retain] autorelease];
    }

  • (UILabel *)nameLabel {
    if (!_nameLabel) {
    self.nameLabel = [[[UILabel alloc] initWithFrame:CGRectMake(, , , )] autorelease];
    }
    return [[_nameLabel retain] autorelease];
    }

  • (UILabel *)phoneLabel {
    if (!_phoneLabel) {
    self.phoneLabel = [[[UILabel alloc] initWithFrame:CGRectMake(, , self.frame.size.width/, )] autorelease];
    _nameLabel.textAlignment = NSTextAlignmentLeft;
    _phoneLabel.textColor = [UIColor lightGrayColor];
    }
    return [[_phoneLabel retain] autorelease];
    }

  • (UIButton *)callBtn {
    if (!_callBtn) {
    self.callBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    _callBtn.frame = CGRectMake(self.frame.size.width - , , , );
    [_callBtn setImage:[UIImage imageNamed:@"dita"] forState:UIControlStateNormal];
    //添加触发方法
    [_callBtn addTarget:self action:@selector(handleCall:) forControlEvents:UIControlEventTouchUpInside];
    }
    return [[_callBtn retain] autorelease];
    }

  • (void)handleCall:(UIButton *)sender {
    if (_delegate && [self.delegate respondsToSelector:@selector(dial:)]) {
    [_delegate dial:self.indexPath];
    }
    }
    ////1.自定义方法 实现cell的控件赋值操作
    //- (void)configureCell:(Contact *)contact {
    // self.photoView.image = [UIImage imageNamed:contact.photo];
    // self.nameLabel.text = contact.name;
    // self.phoneLabel.text = contact.phoneNum;
    //}
    //2.重写setter方法 为cell的控件赋值

  • (void)setContact:(Contact *)contact {
    if (_contact != contact) {
    [_contact release];
    _contact = [contact retain];
    }
    self.photoView.image = contact.photoView;
    self.nameLabel.text = contact.name;
    self.phoneLabel.text = contact.phoneNum;
    }

  • (void)dealloc {
    self.nameLabel = nil;
    self.photoView = nil;
    self.phoneLabel = nil;
    self.callBtn = nil;
    self.indexPath = nil;
    [super dealloc];
    }

@end

CustomContactCell文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------
#import
#import "Contact.h"

@interface DetailViewController : UIViewController
@property (nonatomic, retain) Contact *contact;//接收上一界面的联系人对象

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "DetailViewController.h"
#import "DetailView.h"
@interface DetailViewController ()

@end

@implementation DetailViewController
//重写loadView 指定视图控制器的根视图

  • (void)loadView {
    DetailView *detail = [[DetailView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    //给对应控件赋值
    if (!self.contact.photo) {
    detail.avaterView.image = [UIImage imageNamed:@"grassGreen_avatarEmpty"];
    } else {
    detail.avaterView.image = [UIImage imageNamed:self.contact.photo];
    }
    detail.nameTF.text = self.contact.name;
    detail.genderTF.text = self.contact.gender;
    detail.phoneNumTF.text = self.contact.phoneNum;

    self.view = detail;
    [detail release];
    }
    //配置导航条属性

  • (void)customizedNaviBar{
    self.navigationItem.title = @"";
    UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"btn_navigationBar_back"] style:UIBarButtonItemStylePlain target:self action:@selector(handlePop:)];
    self.navigationItem.leftBarButtonItem = left;
    [left release];

    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    }

  • (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self customizedNaviBar];
    [self setNotEnabled];//设置进入后控件处于不可编辑状态
    [self addTapGesture];//给头像添加轻拍手势

}
#pragma mark - handle Action -
//返回主页

  • (void)handlePop:(UIBarButtonItem *)sender {
    [self.navigationController popViewControllerAnimated:YES];
    }

  • (void)setNotEnabled {
    DetailView *detail = (DetailView *)self.view;
    //关闭用户交互
    detail.userInteractionEnabled = NO;
    }

//设置编辑状态

  • (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    //editing Edit -- YES Done -- NO
    [super setEditing:editing animated:animated];
    //输入框进入编辑状态
    self.view.userInteractionEnabled = editing;
    //点击Done之后 更新内容
    if (!editing) {
    [self updateData];
    }
    }

  • (void)updateData {
    DetailView *view = (DetailView *)self.view;
    self.contact.name = view.nameTF.text;
    self.contact.gender = view.genderTF.text;
    self.contact.phoneNum = view.phoneNumTF.text;
    self.contact.photoView = view.avaterView.image;
    }

  • (void)addTapGesture {
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [((DetailView *)self.view).avaterView addGestureRecognizer:tap];
    [tap release];
    }
    //设置或修改头像

  • (void)handleTap:(UITapGestureRecognizer *)tap {
    //调用系统相机或图库
    UIActionSheet *myActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照",@"从相册中选取", nil];
    [myActionSheet showInView:self.view];
    [myActionSheet release];
    }

  • (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
    //呼出的菜单按钮点击后的响应
    if (buttonIndex == actionSheet.cancelButtonIndex)
    {
    NSLog(@"取消");
    }else{
    //相机可用时初始化 pikerController为UIImagePickerControllerSourceTypeCamera
    UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
    switch (buttonIndex)
    {
    case : //打开照相机拍照
    sourceType = UIImagePickerControllerSourceTypeCamera;
    break;

        case :  //打开本地相册  
            sourceType = UIImagePickerControllerSourceTypePhotoLibrary;  
            break;  
    }  
    if (!\[UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera\])  
    {  
        //如果源类型 UIImagePickerControllerSourceTypeCamera 不可用时 设置UIImagePickerControllerSourceTypePhotoLibrary 为源类型  
        sourceType = UIImagePickerControllerSourceTypePhotoLibrary;  
    }  
    UIImagePickerController \*picker = \[\[UIImagePickerController alloc\] init\];//初始化  
    picker.delegate = self;  
    picker.allowsEditing = YES;//设置可编辑  
    picker.sourceType = sourceType;  
    \[self presentViewController:picker animated:YES completion:nil\];//进入照相界面或相册界面  
    \[picker release\];  

    }
    }

  • (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    ((DetailView *)self.view).avaterView.image = [info objectForKey:UIImagePickerControllerEditedImage];//use编辑后的照片;
    [self dismissViewControllerAnimated:YES completion:nil];
    }

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

@end

DetailViewController文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------
#import

@interface DetailView : UIView

@property (nonatomic, retain) UITextField *nameTF;//姓名
@property (nonatomic, retain) UITextField *genderTF;//性别
@property (nonatomic, retain) UITextField *phoneNumTF;//电话号码

@property (nonatomic, retain) UIImageView *avaterView;//头像

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "DetailView.h"
#import "UIColor+Addition.h"
@implementation DetailView

  • (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
    self.backgroundColor = [UIColor whiteColor];
    [self setUpViews];
    }
    return self;
    }
    //布局子视图

  • (void)setUpViews {
    //头像
    self.avaterView = [[UIImageView alloc] initWithFrame:CGRectMake(, , , )];
    _avaterView.image = [UIImage imageNamed:@"green_avatarEmpty"];
    _avaterView.userInteractionEnabled = YES;
    _avaterView.layer.cornerRadius = ;
    _avaterView.layer.masksToBounds = YES;
    [self addSubview:_avaterView];
    [_avaterView release];

    //姓名
    self.nameTF = [[UITextField alloc] initWithFrame:CGRectMake(, , , )];
    _nameTF.backgroundColor = [UIColor lightGreenColor];
    _nameTF.placeholder = @"姓名";
    _nameTF.textColor = [UIColor whiteColor];
    [self addSubview:_nameTF];
    [_nameTF release];

    //性别
    self.genderTF = [[UITextField alloc] initWithFrame:CGRectMake(, , , )];
    _genderTF.placeholder = @"性别";
    _genderTF.backgroundColor = [UIColor lightGreenColor];
    _genderTF.textColor = [UIColor whiteColor];
    [self addSubview:_genderTF];
    [_genderTF release];

    //电话号码
    self.phoneNumTF = [[UITextField alloc] initWithFrame:CGRectMake(, , self.frame.size.width - , )];
    _phoneNumTF.backgroundColor = [UIColor lightGreenColor];
    _phoneNumTF.placeholder = @"手机号";
    _phoneNumTF.textColor = [UIColor whiteColor];
    [self addSubview:_phoneNumTF];
    [_phoneNumTF release];

}

@end

DetailView文件

#pragma mark (.h文件)--------------------------------------------------------------------------------------------------------

#import

@interface ChineseToPinyin : NSObject {

}

  • (NSString *) pinyinFromChiniseString:(NSString *)string;
  • (char) sortSectionTitle:(NSString *)string;

@end

#pragma mark (.m文件)--------------------------------------------------------------------------------------------------------
#import "ChineseToPinyin.h"

NSString *FindLetter(int nCode) {
NSString *strValue = @"";
switch(nCode) {
case :
case :
case :
case :
strValue = @"A";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"AI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"AN";
break;
strValue = @"ANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"AO";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"BA";
break;
case :
case :
case :
strValue = @"BAI";
break;
case :
case :
case :
case :
case :
case :
strValue = @"BAN";
break;
case :
case :
strValue = @"BANG";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"BAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"BEI";
break;
case :
case :
case :
case :
strValue = @"BEN";
break;
case :
case :
strValue = @"BENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"BI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"BIAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"BIAO";
break;
case :
strValue = @"BIE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"BIN";
break;
case :
case :
case :
strValue = @"BING";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"BO";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"BU";
break;
case :
case :
strValue = @"CA";
break;
strValue = @"CAI";
break;
case :
case :
case :
case :
case :
strValue = @"CAN";
break;
case :
strValue = @"CANG";
break;
case :
case :
case :
case :
strValue = @"CAO";
break;
case :
strValue = @"CE";
break;
case :
case :
strValue = @"CEN";
break;
case :
strValue = @"CENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"CHA";
break;
case :
case :
case :
case :
strValue = @"CHAI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"CHAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"CHANG";
break;
case :
case :
case :
strValue = @"CHAO";
break;
case :
case :
strValue = @"CHE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"CHEN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"CHENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"CHI";
break;
case :
case :
case :
case :
case :
strValue = @"CHONG";
break;
case :
case :
case :
case :
case :
strValue = @"CHOU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"CHU";
break;
case :
case :
case :
case :
strValue = @"CHUAI";
break;
case :
case :
case :
case :
case :
strValue = @"CHUAN";
break;
case :
strValue = @"CHUANG";
break;
case :
case :
case :
strValue = @"CHUI";
break;
case :
case :
case :
strValue = @"CHUN";
break;
case :
case :
case :
strValue = @"CHUO";
break;
strValue = @"CI";
break;
case :
case :
case :
case :
case :
strValue = @"4337 À≈";
break;
case :
case :
case :
case :
case :
case :
strValue = @"CONG";
break;
case :
case :
case :
strValue = @"COU";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"CU";
break;
case :
case :
case :
case :
strValue = @"CUAN";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"CUI";
break;
case :
case :
strValue = @"CUN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"CUO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"DA";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"DAI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"DAN";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"DANG";
break;
case :
case :
case :
case :
strValue = @"DAO";
break;
case :
strValue = @"DE";
break;
case :
case :
case :
case :
case :
case :
strValue = @"DENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"DI";
break;
case :
strValue = @"DIA";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"DIAN";
break;
case :
case :
case :
strValue = @"DIAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"DIE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"DING";
break;
case :
strValue = @"DIU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"DONG";
break;
case :
case :
case :
case :
strValue = @"DOU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"DU";
break;
case :
case :
case :
strValue = @"DUAN";
break;
case :
case :
case :
strValue = @"DUI";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"DUN";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"DUO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"E";
break;
case :
case :
strValue = @"EN";
break;
case :
case :
case :
case :
case :
case :
strValue = @"ER";
break;
case :
case :
strValue = @"FA";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"FAN";
break;
case :
case :
case :
case :
case :
strValue = @"FANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"FEI";
break;
case :
case :
case :
case :
case :
strValue = @"FEN";
break;
case :
case :
case :
case :
case :
case :
strValue = @"FENG";
break;
strValue = @"FO";
break;
case :
strValue = @"FOU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"FU";
break;
case :
case :
case :
case :
case :
strValue = @" GA";
break;
case :
case :
case :
case :
case :
strValue = @"GAI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"GAN";
break;
case :
case :
case :
strValue = @"GANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"GAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"GE";
break;
strValue = @"GEI";
break;
case :
case :
case :
case :
strValue = @"GEN";
break;
case :
case :
case :
case :
strValue = @"GENG";
break;
case :
case :
case :
case :
strValue = @"GONG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"GOU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"GU";
break;
case :
case :
case :
case :
case :
case :
strValue = @"GUA";
break;
strValue = @"GUAI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"GUAN";
break;
case :
case :
case :
case :
strValue = @"GUANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"GUI";
break;
case :
case :
case :
case :
strValue = @"GUN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"GUO";
break;
case :
strValue = @"HA";
break;
case :
case :
case :
strValue = @"HAI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"HAN";
break;
case :
case :
case :
strValue = @"HANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"HAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"HE";
break;
strValue = @"HEI";
break;
strValue = @"HEN";
break;
case :
case :
case :
strValue = @"HENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"HONG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"HOU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"HU";
break;
case :
case :
case :
case :
strValue = @"HUA";
break;
case :
strValue = @"HUAI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"HUAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"HUANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"HUI";
break;
case :
case :
case :
case :
strValue = @"HUN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"HUO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JIA";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JIAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JIANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JIAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JIE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JIN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JIANG";
break;
case :
case :
strValue = @"JIONG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JIU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JUAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"JUE";
break;
case :
case :
case :
case :
strValue = @"JUN";
break;
case :
case :
case :
strValue = @"KA";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"KAI";
break;
case :
case :
case :
case :
case :
strValue = @"KAN";
break;
case :
case :
case :
strValue = @"KANG";
break;
case :
case :
case :
case :
strValue = @"KAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"KE";
break;
case :
strValue = @"KEN";
break;
case :
strValue = @"KENG";
break;
case :
case :
case :
strValue = @"KONG";
break;
case :
case :
case :
case :
case :
strValue = @"KOU";
break;
case :
case :
case :
case :
case :
strValue = @"KU";
break;
case :
strValue = @"KUA";
break;
case :
case :
case :
case :
case :
strValue = @"KUAI";
break;
case :
strValue = @"KUAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"KUANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"KUI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"LIAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"LIE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"LIN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"LING";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"LIU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"LONG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"LOU";
break;
case :
case :
case :
case :
case :
case :
strValue = @"L®π";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"LU";
break;
case :
case :
case :
case :
case :
strValue = @"LUAN";
break;
strValue = @"L®µE";
break;
strValue = @"LUN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"LUO";
break;
case :
strValue = @"M";
break;
case :
case :
case :
case :
case :
strValue = @"MA";
break;
case :
case :
case :
strValue = @"MAI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"MAN";
break;
case :
case :
case :
case :
strValue = @"MANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"MAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"MEI";
break;
case :
case :
case :
case :
strValue = @"MEN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"MENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"MI";
break;
case :
case :
case :
case :
case :
strValue = @"MIAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"MIAO";
break;
case :
case :
case :
case :
strValue = @"MIE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"MIN";
break;
case :
case :
case :
case :
case :
case :
strValue = @"MING";
break;
strValue = @"MIU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"MO";
break;
case :
case :
case :
case :
case :
case :
strValue = @"MOU";
break;
case :
case :
case :
case :
case :
case :
strValue = @"MU";
break;
case :
strValue = @"N";
break;
case :
case :
case :
case :
strValue = @"NA";
break;
case :
case :
case :
case :
strValue = @"NAI";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"NAN";
break;
case :
case :
case :
case :
strValue = @"NANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"NAO";
break;
case :
strValue = @"NE";
break;
strValue = @"NEI";
break;
case :
strValue = @"NEN";
break;
strValue = @"NENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"NI";
break;
case :
case :
case :
case :
case :
case :
strValue = @"NIAN";
break;
strValue = @"NIANG";
break;
case :
case :
case :
case :
strValue = @"NIAO";
break;
case :
case :
case :
case :
case :
case :
strValue = @"NIE";
break;
strValue = @"NIN";
break;
case :
case :
case :
case :
strValue = @"NING";
break;
case :
case :
case :
strValue = @"NIU";
break;
case :
case :
strValue = @"NONG";
break;
case :
strValue = @"NOU";
break;
case :
case :
case :
case :
strValue = @"NU";
break;
case :
case :
case :
strValue = @"N®µ";
break;
strValue = @"NUAN";
break;
strValue = @"NUE";
break;
case :
case :
case :
case :
strValue = @"NUO";
break;
case :
case :
strValue = @"O";
break;
case :
case :
case :
case :
strValue = @"OU";
break;
case :
case :
case :
strValue = @"PA";
break;
case :
case :
case :
strValue = @"PAI";
break;
case :
case :
case :
case :
case :
case :
strValue = @"PAN";
break;
case :
case :
case :
case :
strValue = @"PANG";
break;
case :
case :
case :
case :
case :
strValue = @"PAO";
break;
case :
case :
case :
case :
case :
case :
strValue = @"PEI";
break;
case :
strValue = @"PEN";
break;
case :
case :
case :
case :
strValue = @"PENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"PI";
break;
case :
case :
case :
case :
case :
case :
strValue = @"PIAN";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"PIAO";
break;
case :
case :
strValue = @"PIE";
break;
case :
case :
case :
case :
case :
case :
strValue = @"PIN";
break;
case :
case :
case :
case :
strValue = @"PING";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"PO";
break;
case :
case :
strValue = @"POU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"PU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"QI";
break;
case :
case :
strValue = @"QIA";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"QIAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"QIANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"QIAO";
break;
case :
case :
case :
case :
case :
case :
strValue = @"QIE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"QIN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"QING";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"QIONG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"QIU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"QU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"QUAN";
break;
case :
case :
case :
strValue = @"QUE";
break;
case :
strValue = @"QUN";
break;
case :
case :
case :
strValue = @"RAN";
break;
case :
case :
strValue = @"RANG";
break;
case :
case :
case :
strValue = @"RAO";
break;
strValue = @"RE";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"REN";
break;
strValue = @"RENG";
break;
strValue = @"RI";
break;
case :
case :
case :
case :
case :
strValue = @"RONG";
break;
case :
case :
case :
strValue = @"ROU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"RU";
break;
case :
strValue = @"RUAN";
break;
case :
case :
case :
case :
case :
strValue = @"RUI";
break;
strValue = @"RUN";
break;
case :
case :
strValue = @"RUO";
break;
case :
case :
case :
case :
case :
strValue = @"SA";
break;
case :
strValue = @"SAI";
break;
case :
case :
case :
strValue = @"SAN";
break;
case :
case :
case :
strValue = @"SANG";
break;
case :
case :
case :
case :
case :
case :
strValue = @"SAO";
break;
strValue = @"SE";
break;
strValue = @"SEN";
break;
strValue = @"SENG";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"SHA";
break;
case :
strValue = @"SHAI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"SHAN";
break;
case :
case :
case :
case :
case :
strValue = @"SHANG";
break;
case :
case :
case :
case :
case :
case :
strValue = @"SHAO";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"SHE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"SHEN";
break;
case :
case :
case :
case :
strValue = @"SHENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"SHI";
break;
case :
case :
case :
strValue = @"SHOU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"SHU";
break;
case :
strValue = @"SHUA";
break;
case :
strValue = @"SHUAI";
break;
case :
case :
strValue = @"SHUAN";
break;
case :
strValue = @"SHUANG";
break;
strValue = @"SHUI";
break;
strValue = @"SHUN";
break;
case :
case :
case :
case :
case :
strValue = @"SHUO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"SI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"SONG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"SOU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"SU";
break;
case :
strValue = @"SUAN";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"SUI";
break;
case :
case :
case :
case :
case :
strValue = @"SUN";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"SUO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"TA";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"TAI";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"TAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"TANG";
break;
case :
case :
case :
case :
case :
strValue = @"TAO";
break;
strValue = @"1845 ≤Õ";
break;
case :
case :
case :
strValue = @"TE";
break;
case :
strValue = @"TENG";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"TI";
break;
case :
case :
case :
case :
case :
strValue = @"TIAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"TIAO";
break;
case :
case :
strValue = @"TIE";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"TING";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"TONG";
break;
case :
case :
case :
strValue = @"TOU";
break;
case :
case :
case :
case :
case :
strValue = @"TU";
break;
case :
case :
strValue = @"TUAN";
break;
case :
strValue = @"TUI";
break;
case :
case :
case :
case :
strValue = @"TUN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"TUO";
break;
case :
case :
case :
strValue = @"WA";
break;
strValue = @"WAI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"WAN";
break;
case :
case :
case :
case :
case :
strValue = @"WANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"WEI";
break;
case :
case :
case :
case :
case :
strValue = @"WEN";
break;
case :
case :
strValue = @"WENG";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"WO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"WU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"XI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"XIA";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"XIAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"XIANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"XIAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"XIE";
break;
case :
case :
case :
case :
case :
strValue = @"XIN";
break;
case :
case :
case :
case :
case :
strValue = @"XING";
break;
case :
strValue = @"XIONG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"XIU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"XU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"XUAN";
break;
case :
case :
case :
case :
strValue = @"XUE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"XUN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YA";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YAN";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"YANG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YAO";
break;
case :
case :
case :
case :
case :
case :
case :
strValue = @"YE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YI";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YIN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YING";
break;
case :
strValue = @"YO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YONG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YOU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YUAN";
break;
case :
case :
case :
case :
case :
strValue = @"YUE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"YUN";
break;
case :
case :
strValue = @"ZA";
break;
case :
case :
strValue = @"ZAI";
break;
case :
case :
case :
case :
case :
case :
strValue = @"ZAN";
break;
case :
case :
case :
strValue = @"ZANG";
break;
case :
strValue = @"ZAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"ZE";
break;
strValue = @"ZEI";
break;
case :
strValue = @"ZEN";
break;
case :
case :
case :
case :
strValue = @"ZENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"ZHA";
break;
case :
case :
strValue = @"ZHAI";
break;
case :
case :
case :
strValue = @"ZHAN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"ZHANG";
break;
case :
case :
case :
case :
strValue = @"ZHAO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"ZHE";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"ZHEN";
break;
case :
case :
case :
case :
case :
case :
strValue = @"ZHENG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"ZHI";
break;
case :
case :
case :
case :
case :
strValue = @"ZHONG";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"ZHOU";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"ZHU";
break;
strValue = @"ZHUA";
break;
strValue = @"ZHUAI";
break;
case :
case :
case :
strValue = @"ZHUAN";
break;
case :
strValue = @"ZHUANG";
break;
case :
case :
case :
strValue = @"ZHUI";
break;
case :
case :
strValue = @"ZHUN";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"ZHUO";
break;
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
case :
strValue = @"ZI";
break;
case :
case :
case :
strValue = @"ZONG";
break;
case :
case :
case :
case :
case :
strValue = @"ZOU";
break;
case :
case :
case :
strValue = @"ZU";
break;
case :
case :
case :
strValue = @"ZUAN";
break;
case :
strValue = @"ZUI";
break;
case :
case :
case :
strValue = @"ZUN";
break;
case :
case :
case :
case :
case :
case :
strValue = @"ZUO";
break;
default:
if(nCode >= && nCode <= ) { strValue = @"A"; break; } if(nCode >= && nCode <= ) { strValue = @"AI"; break; } if(nCode >= && nCode <= ) { strValue = @"AN"; break; } if(nCode >= && nCode <= ) { strValue = @"ANG"; break; } if(nCode >= && nCode <= ) { strValue = @"AO"; break; } if(nCode >= && nCode <= ) { strValue = @"BA"; break; } if(nCode >= && nCode <= ) { strValue = @"BAI"; break; } if(nCode >= && nCode <= ) { strValue = @"BAN"; break; } if(nCode >= && nCode <= ) { strValue = @"BANG"; break; } if(nCode >= && nCode <= ) { strValue = @"BAO"; break; } if(nCode >= && nCode <= ) { strValue = @"BEI"; break; } if(nCode >= && nCode <= ) { strValue = @"BEN"; break; } if(nCode >= && nCode <= ) { strValue = @"BENG"; break; } if(nCode> && nCode <= ) { strValue = @"BI"; break; } if(nCode >= && nCode <= ) { strValue = @"BIAN"; break; } if(nCode >= && nCode <= ) { strValue = @"BIAO"; break; } if(nCode >= && nCode <= ) { strValue = @"BIE"; break; } if(nCode >= && nCode <= ) { strValue = @"BIN"; break; } if(nCode >= && nCode <= ) { strValue = @"BING"; break; } if(nCode >= && nCode <= ) { strValue = @"BING"; break; } if(nCode >= && nCode <= ) { strValue = @"BO"; break; } if(nCode >= && nCode <= ) { strValue = @"BU"; break; } if(nCode==) { strValue = @"CA"; break; } if(nCode >= && nCode <= ) { strValue = @"CAI"; break; } if(nCode >= && nCode <= ) { strValue = @"CAN"; break; } if(nCode >= && nCode <= ) { strValue = @"CANG"; break; } if(nCode >= && nCode <= ) { strValue = @"CAO"; break; } if(nCode >= && nCode <= ) { strValue = @"CE"; break; } if(nCode >= && nCode <= ) { strValue = @"CENG"; break; } if(nCode >= && nCode <= ) { strValue = @"CHA"; break; } if(nCode >= && nCode <= ) { strValue = @"CHAI"; break; } if(nCode >= && nCode <= ) { strValue = @"CHAN"; break; } if(nCode >= && nCode <= ) { strValue = @"CHANG"; break; } if(nCode >= && nCode <= ) { strValue = @"CHAO"; break; } if(nCode >= && nCode <= ) { strValue = @"CHE"; break; } if(nCode >= && nCode <= ) { strValue = @"CHEN"; break; } if(nCode >= && nCode <= ) { strValue = @"CHENG"; break; } if(nCode >= && nCode <= ) { strValue = @"CHI"; break; } if(nCode >= && nCode <= ) { strValue = @"CHONG"; break; } if(nCode >= && nCode <= ) { strValue = @"CHOU"; break; } if(nCode >= && nCode <= ) { strValue = @"CHU"; break; } if(nCode==) { strValue = @"CHUAI"; break; } if(nCode >= && nCode <= ) { strValue = @"CHUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"CHUANG"; break; } if(nCode >= && nCode <= ) { strValue = @"CHUI"; break; } if(nCode >= && nCode <= ) { strValue = @"CHUN"; break; } if(nCode >= && nCode <= ) { strValue = @"CHUO"; break; } if(nCode >= && nCode <= ) { strValue = @"CI"; break; } if(nCode >= && nCode <= ) { strValue = @"CONG"; break; } if(nCode >= && nCode <= ) { strValue = @"CU"; break; } if(nCode >= && nCode <= ) { strValue = @"CUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"CUI"; break; } if(nCode >= && nCode <= ) { strValue = @"CUN"; break; } if(nCode >= && nCode <= ) { strValue = @"CUO"; break; } if(nCode >= && nCode <= ) { strValue = @"DA"; break; } if(nCode >= && nCode <= ) { strValue = @"DAI"; break; } if(nCode >= && nCode <= ) { strValue = @"DAN"; break; } if(nCode >= && nCode <= ) { strValue = @"DANG"; break; } if(nCode >= && nCode <= ) { strValue = @"DAO"; break; } if(nCode >= && nCode <= ) { strValue = @"DE"; break; } if(nCode >= && nCode <= ) { strValue = @"DENG"; break; } if(nCode >= && nCode <= ) { strValue = @"DI"; break; } if(nCode >= && nCode <= ) { strValue = @"DIAN"; break; } if(nCode >= && nCode <= ) { strValue = @"DIAO"; break; } if(nCode >= && nCode <= ) { strValue = @"DIE"; break; } if(nCode >= && nCode <= ) { strValue = @"DING"; break; } if(nCode==) { strValue = @"DIU"; break; } if(nCode >= && nCode <= ) { strValue = @"DONG"; break; } if(nCode >= && nCode <= ) { strValue = @"DOU"; break; } if(nCode >= && nCode <= ) { strValue = @"DU"; break; } if(nCode >= && nCode <= ) { strValue = @"DUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"DUI"; break; } if(nCode >= && nCode <= ) { strValue = @"DUN"; break; } if(nCode >= && nCode <= ) { strValue = @"DUO"; break; } if(nCode >= && nCode <= ) { strValue = @"E"; break; } if(nCode==) { strValue = @"EN"; break; } if(nCode >= && nCode <= ) { strValue = @"ER"; break; } if(nCode >= && nCode <= ) { strValue = @"FA"; break; } if(nCode >= && nCode <= ) { strValue = @"FAN"; break; } if(nCode >= && nCode <= ) { strValue = @"FANG"; break; } if(nCode >= && nCode <= ) { strValue = @"FEI"; break; } if(nCode >= && nCode <= ) { strValue = @"FEN"; break; } if(nCode >= && nCode <= ) { strValue = @"FENG"; break; } if(nCode==) { strValue = @"FO"; break; } if(nCode==) { strValue = @"FOU"; break; } if(nCode >= && nCode <= ) { strValue = @"FU"; break; } if(nCode >= && nCode <= ) { strValue = @"GAI"; break; } if(nCode >= && nCode <= ) { strValue = @"GAN"; break; } if(nCode >= && nCode <= ) { strValue = @"GANG"; break; } if(nCode >= && nCode <= ) { strValue = @"GAO"; break; } if(nCode >= && nCode <= ) { strValue = @"GE"; break; } if(nCode==) { strValue = @"GEI"; break; } if(nCode >= && nCode <= ) { strValue = @"GEN"; break; } if(nCode >= && nCode <= ) { strValue = @"GENG"; break; } if(nCode >= && nCode <= ) { strValue = @"GONG"; break; } if(nCode >= && nCode <= ) { strValue = @"GOU"; break; } if(nCode >= && nCode <= ) { strValue = @"GU"; break; } if(nCode >= && nCode <= ) { strValue = @"GUA"; break; } if(nCode >= && nCode <= ) { strValue = @"GUAI"; break; } if(nCode >= && nCode <= ) { strValue = @"GUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"GUANG"; break; } if(nCode >= && nCode <= ) { strValue = @"GUI"; break; } if(nCode >= && nCode <= ) { strValue = @"GUN"; break; } if(nCode >= && nCode <= ) { strValue = @"GUO"; break; } if(nCode==) { strValue = @"HA"; break; } if(nCode >= && nCode <= ) { strValue = @"HAI"; break; } if(nCode >= && nCode <= ) { strValue = @"HAN"; break; } if(nCode >= && nCode <= ) { strValue = @"HANG"; break; } if(nCode >= && nCode <= ) { strValue = @"HAO"; break; } if(nCode >= && nCode <= ) { strValue = @"HE"; break; } if(nCode >= && nCode <= ) { strValue = @"HEI"; break; } if(nCode >= && nCode <= ) { strValue = @"HEN"; break; } if(nCode >= && nCode <= ) { strValue = @"HENG"; break; } if(nCode >= && nCode <= ) { strValue = @"HONG"; break; } if(nCode >= && nCode <= ) { strValue = @"HOU"; break; } if(nCode >= && nCode <= ) { strValue = @"HU"; break; } if(nCode >= && nCode <= ) { strValue = @"HUA"; break; } if(nCode >= && nCode <= ) { strValue = @"HUAI"; break; } if(nCode >= && nCode <= ) { strValue = @"HUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"HUANG"; break; } if(nCode >= && nCode <= ) { strValue = @"HUI"; break; } if(nCode >= && nCode <= ) { strValue = @"HUN"; break; } if(nCode >= && nCode <= ) { strValue = @"HUO"; break; } if(nCode >= && nCode <= ) { strValue = @"JI"; break; } if(nCode >= && nCode <= ) { strValue = @"JIA"; break; } if(nCode >= && nCode <= ) { strValue = @"JIAN"; break; } if(nCode >= && nCode <= ) { strValue = @"JIANG"; break; } if(nCode >= && nCode <= ) { strValue = @"JIAO"; break; } if(nCode >= && nCode <= ) { strValue = @"JIE"; break; } if(nCode >= && nCode <= ) { strValue = @"JIN"; break; } if(nCode >= && nCode <= ) { strValue = @"JING"; break; } if(nCode >= && nCode <= ) { strValue = @"JIONG"; break; } if(nCode >= && nCode <= ) { strValue = @"JIU"; break; } if(nCode >= && nCode <= ) { strValue = @"JU"; break; } if(nCode >= && nCode <= ) { strValue = @"JUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"JUE"; break; } if(nCode >= && nCode <= ) { strValue = @"JUN"; break; } if(nCode >= && nCode <= ) { strValue = @"KA"; break; } if(nCode >= && nCode <= ) { strValue = @"KAI"; break; } if(nCode >= && nCode <= ) { strValue = @"KAN"; break; } if(nCode >= && nCode <= ) { strValue = @"KANG"; break; } if(nCode >= && nCode <= ) { strValue = @"KAO"; break; } if(nCode >= && nCode <= ) { strValue = @"KE"; break; } if(nCode >= && nCode <= ) { strValue = @"KEN"; break; } if(nCode >= && nCode <= ) { strValue = @"KENG"; break; } if(nCode >= && nCode <= ) { strValue = @"KONG"; break; } if(nCode >= && nCode <= ) { strValue = @"KOU"; break; } if(nCode >= && nCode <= ) { strValue = @"KU"; break; } if(nCode >= && nCode <= ) { strValue = @"KUA"; break; } if(nCode >= && nCode <= ) { strValue = @"KUAI"; break; } if(nCode >= && nCode <= ) { strValue = @"KUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"KUANG"; break; } if(nCode >= && nCode <= ) { strValue = @"KUI"; break; } if(nCode >= && nCode <= ) { strValue = @"KUN"; break; } if(nCode >= && nCode <= ) { strValue = @"KUO"; break; } if(nCode >= && nCode <= ) { strValue = @"LA"; break; } if(nCode >= && nCode <= ) { strValue = @"LAI"; break; } if(nCode >= && nCode <= ) { strValue = @"LAN"; break; } if(nCode >= && nCode <= ) { strValue = @"LANG"; break; } if(nCode >= && nCode <= ) { strValue = @"LAO"; break; } if(nCode >= && nCode <= ) { strValue = @"LE"; break; } if(nCode >= && nCode <= ) { strValue = @"LEI"; break; } if(nCode >= && nCode <= ) { strValue = @"LENG"; break; } if(nCode >= && nCode <= ) { strValue = @"LI"; } if(nCode==) { strValue = @"LIA"; break; } if(nCode >= && nCode <= ) { strValue = @"LIAN"; break; } if(nCode >= && nCode <= ) { strValue = @"LIANG"; break; } if(nCode >= && nCode <= ) { strValue = @"LIAO"; break; } if(nCode >= && nCode <= ) { strValue = @"LIE"; break; } if(nCode >= && nCode <= ) { strValue = @"LIN"; break; } if(nCode >= && nCode <= ) { strValue = @"LING"; break; } if(nCode >= && nCode <= ) { strValue = @"LIU"; break; } if(nCode >= && nCode <= ) { strValue = @"LONG"; break; } if(nCode >= && nCode <= ) { strValue = @"LOU"; break; } if(nCode >= && nCode <= ) { strValue = @"LU"; break; } if(nCode >= && nCode <= ) { strValue = @"LUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"LUE"; break; } if(nCode >= && nCode <= ) { strValue = @"LUN"; break; } if(nCode >= && nCode <= ) { strValue = @"LUO"; break; } if(nCode >= && nCode <= ) { strValue = @"MA"; break; } if(nCode >= && nCode <= ) { strValue = @"MAI"; break; } if(nCode >= && nCode <= ) { strValue = @"MAN"; break; } if(nCode >= && nCode <= ) { strValue = @"MANG"; break; } if(nCode >= && nCode <= ) { strValue = @"MAO"; break; } if(nCode==) { strValue = @"ME"; break; } if(nCode >= && nCode <= ) { strValue = @"MEI"; break; } if(nCode >= && nCode <= ) { strValue = @"MEN"; break; } if(nCode >= && nCode <= ) { strValue = @"MENG"; break; } if(nCode >= && nCode <= ) { strValue = @"MI"; } if(nCode >= && nCode <= ) { strValue = @"MIAN"; break; } if(nCode >= && nCode <= ) { strValue = @"MIAO"; break; } if(nCode >= && nCode <= ) { strValue = @"MIE"; break; } if(nCode >= && nCode <= ) { strValue = @"MIN"; break; } if(nCode >= && nCode <= ) { strValue = @"MING"; break; } if(nCode==) { strValue = @"MIU"; break; } if(nCode >= && nCode <= ) { strValue = @"MO"; break; } if(nCode >= && nCode <= ) { strValue = @"MOU"; break; } if(nCode >= && nCode <= ) { strValue = @"MU"; break; } if(nCode >= && nCode <= ) { strValue = @"NA"; break; } if(nCode >= && nCode <= ) { strValue = @"NAI"; break; } if(nCode >= && nCode <= ) { strValue = @"NAN"; break; } if(nCode==) { strValue = @"NANG"; break; } if(nCode >= && nCode <= ) { strValue = @"NAO"; break; } if(nCode==) { strValue = @"NE"; break; } if(nCode >= && nCode <= ) { strValue = @"NEI"; break; } if(nCode==) { strValue = @"NEN"; break; } if(nCode==) { strValue = @"NENG"; break; } if(nCode >= && nCode <= ) { strValue = @"NI"; break; } if(nCode >= && nCode <= ) { strValue = @"NIAN"; break; } if(nCode >= && nCode <= ) { strValue = @"NIANG"; break; } if(nCode >= && nCode <= ) { strValue = @"NIAO"; break; } if(nCode >= && nCode <= ) { strValue = @"NIE"; break; } if(nCode==) { strValue = @"NIN"; break; } if(nCode >= && nCode <= ) { strValue = @"NING"; break; } if(nCode >= && nCode <= ) { strValue = @"NIU"; break; } if(nCode >= && nCode <= ) { strValue = @"NONG"; break; } if(nCode >= && nCode <= ) { strValue = @"NU"; break; } if(nCode==) { strValue = @"NUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"NUE"; break; } if(nCode >= && nCode <= ) { strValue = @"NUO"; break; } if(nCode==) { strValue = @"O"; break; } if(nCode >= && nCode <= ) { strValue = @"OU"; break; } if(nCode >= && nCode <= ) { strValue = @"PA"; break; } if(nCode >= && nCode <= ) { strValue = @"PAI"; break; } if(nCode >= && nCode <= ) { strValue = @"PAN"; break; } if(nCode >= && nCode <= ) { strValue = @"PANG"; break; } if(nCode >= && nCode <= ) { strValue = @"PAO"; break; } if(nCode >= && nCode <= ) { strValue = @"PEI"; break; } if(nCode >= && nCode <= ) { strValue = @"PEN"; break; } if(nCode >= && nCode <= ) { strValue = @"PENG"; break; } if(nCode >= && nCode <= ) { strValue = @"PI"; break; } if(nCode >= && nCode <= ) { strValue = @"PIAN"; break; } if(nCode >= && nCode <= ) { strValue = @"PIAO"; break; } if(nCode >= && nCode <= ) { strValue = @"PIE"; break; } if(nCode >= && nCode <= ) { strValue = @"PIN"; break; } if(nCode >= && nCode <= ) { strValue = @"PING"; break; } if(nCode >= && nCode <= ) { strValue = @"PO"; break; } if(nCode==) { strValue = @"POU"; break; } if(nCode >= && nCode <= ) { strValue = @"PU"; break; } if(nCode >= && nCode <= ) { strValue = @"QI"; break; } if(nCode==||(nCode >= && nCode <= )) { strValue = @"QIA"; break; } if(nCode >= && nCode <= ) { strValue = @"QIAN"; break; } if(nCode >= && nCode <= ) { strValue = @"QIANG"; break; } if(nCode >= && nCode <= ) { strValue = @"QIAO"; break; } if(nCode >= && nCode <= ) { strValue = @"QIE"; break; } if(nCode >= && nCode <= ) { strValue = @"QIN"; break; } if(nCode >= && nCode <= ) { strValue = @"QING"; break; } if(nCode >= && nCode <= ) { strValue = @"QIONG"; break; } if(nCode >= && nCode <= ) { strValue = @"QIU"; break; } if(nCode >= && nCode <= ) { strValue = @"QU"; break; } if(nCode >= && nCode <= ) { strValue = @"QUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"QUE"; break; } if(nCode >= && nCode <= ) { strValue = @"QUN"; break; } if(nCode >= && nCode <= ) { strValue = @"RAN"; break; } if(nCode >= && nCode <= ) { strValue = @"RANG"; } if(nCode >= && nCode <= ) { strValue = @"RAO"; break; } if(nCode >= && nCode <= ) { strValue = @"RE"; break; } if(nCode >= && nCode <= ) { strValue = @"REN"; break; } if(nCode >= && nCode <= ) { strValue = @"RENG"; break; } if(nCode==) { strValue = @"RI"; break; } if(nCode >= && nCode <= ) { strValue = @"RONG"; break; } if(nCode >= && nCode <= ) { strValue = @"ROU"; break; } if(nCode >= && nCode <= ) { strValue = @"RU"; break; } if(nCode >= && nCode <= ) { strValue = @"RUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"RUI"; break; } if(nCode >= && nCode <= ) { strValue = @"RUN"; break; } if(nCode >= && nCode <= ) { strValue = @"RUO"; break; } if(nCode >= && nCode <= ) { strValue = @"SA"; break; } if(nCode >= && nCode <= ) { strValue = @"SAI"; break; } if(nCode >= && nCode <= ) { strValue = @"SAN"; break; } if(nCode >= && nCode <= ) { strValue = @"SAN"; break; } if(nCode >= && nCode <= ) { strValue = @"SANG"; break; } if(nCode >= && nCode <= ) { strValue = @"SAO"; break; } if(nCode >= && nCode <= ) { strValue = @"SE"; break; } if(nCode==) { strValue = @"SEN"; } if(nCode==) { strValue = @"SENG"; break; } if(nCode >= && nCode <= ) { strValue = @"SHA"; break; } if(nCode >= && nCode <= ) { strValue = @"SHAI"; break; } if(nCode >= && nCode <= ) { strValue = @"SHAN"; break; } if(nCode >= && nCode <= ) { strValue = @"SHANG"; break; } if(nCode >= && nCode <= ) { strValue = @"SHAO"; break; } if(nCode >= && nCode <= ) { strValue = @"SHE"; break; } if(nCode >= && nCode <= ) { strValue = @"SHEN"; break; } if(nCode >= && nCode <= ) { strValue = @"SHENG"; break; } if(nCode >= && nCode <= ) { strValue = @"SHI"; break; } if(nCode >= && nCode <= ) { strValue = @"SHOU"; break; } if(nCode >= && nCode <= ) { strValue = @"SHU"; break; } if(nCode >= && nCode <= ) { strValue = @"SHUA"; break; } if(nCode >= && nCode <= ) { strValue = @"SHUAI"; break; } if(nCode >= && nCode <= ) { strValue = @"SHUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"SHUANG"; break; } if(nCode >= && nCode <= ) { strValue = @"SHUI"; break; } if(nCode >= && nCode <= ) { strValue = @"SHUN"; break; } if(nCode >= && nCode <= ) { strValue = @"SHUO"; break; } if(nCode >= && nCode <= ) { strValue = @"SI"; break; } if(nCode >= && nCode <= ) { strValue = @"SONG"; break; } if(nCode >= && nCode <= ) { strValue = @"SOU"; break; } if(nCode >= && nCode <= ) { strValue = @"SU"; break; } if(nCode >= && nCode <= ) { strValue = @"SUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"SUI"; break; } if(nCode >= && nCode <= ) { strValue = @"SUN"; break; } if(nCode >= && nCode <= ) { strValue = @"SUO"; break; } if(nCode >= && nCode <= ) { strValue = @"TA"; break; } if(nCode >= && nCode <= ) { strValue = @"TAI"; break; } if(nCode >= && nCode <= ) { strValue = @"TAN"; break; } if(nCode >= && nCode <= ) { strValue = @"TANG"; break; } if(nCode >= && nCode <= ) { strValue = @"TAO"; break; } if(nCode==) { strValue = @"TE"; break; } if(nCode >= && nCode <= ) { strValue = @"TENG"; break; } if(nCode >= && nCode <= ) { strValue = @"TI"; break; } if(nCode >= && nCode <= ) { strValue = @"TIAN"; break; } if(nCode >= && nCode <= ) { strValue = @"TIAO"; break; } if(nCode >= && nCode <= ) { strValue = @"TIE"; break; } if(nCode >= && nCode <= ) { strValue = @"TING"; break; } if(nCode >= && nCode <= ) { strValue = @"TONG"; break; } if(nCode >= && nCode <= ) { strValue = @"TOU"; break; } if(nCode >= && nCode <= ) { strValue = @"TU"; break; } if(nCode >= && nCode <= ) { strValue = @"TUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"TUI"; break; } if(nCode >= && nCode <= ) { strValue = @"TUN"; break; } if(nCode >= && nCode <= ) { strValue = @"TUO"; break; } if(nCode >= && nCode <= ) { strValue = @"WA"; break; } if(nCode >= && nCode <= ) { strValue = @"WAI"; break; } if(nCode >= && nCode <= ) { strValue = @"WAN"; break; } if(nCode >= && nCode <= ) { strValue = @"WANG"; break; } if(nCode >= && nCode <= ) { strValue = @"WEI"; break; } if(nCode >= && nCode <= ) { strValue = @"WEN"; break; } if(nCode >= && nCode <= ) { strValue = @"WENG"; break; } if(nCode >= && nCode <= ) { strValue = @"WO"; break; } if(nCode >= && nCode <= ) { strValue = @"WU"; break; } if(nCode >= && nCode <= ) { strValue = @"XI"; break; } if(nCode >= && nCode <= ) { strValue = @"XIA"; break; } if(nCode >= && nCode <= ) { strValue = @"XIAN"; break; } if(nCode >= && nCode <= ) { strValue = @"XIANG"; break; } if(nCode >= && nCode <= ) { strValue = @"XIAO"; break; } if(nCode >= && nCode <= ) { strValue = @"XIE"; break; } if(nCode >= && nCode <= ) { strValue = @"XIN"; break; } if(nCode >= && nCode <= ) { strValue = @"XING"; break; } if(nCode >= && nCode <= ) { strValue = @"XIONG"; break; } if(nCode >= && nCode <= ) { strValue = @"XIU"; break; } if(nCode >= && nCode <= ) { strValue = @"XU"; break; } if(nCode >= && nCode <= ) { strValue = @"XUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"XUE"; break; } if(nCode >= && nCode <= ) { strValue = @"XUN"; break; } if(nCode >= && nCode <= ) { strValue = @"YA"; break; } if(nCode >= && nCode <= ) { strValue = @"YAN"; break; } if(nCode >= && nCode <= ) { strValue = @"YANG"; break; } if(nCode >= && nCode <= ) { strValue = @"YAO"; break; } if(nCode >= && nCode <= ) { strValue = @"YE"; break; } if(nCode >= && nCode <= ) { strValue = @"YI"; break; } if(nCode >= && nCode <= ) { strValue = @"YIN"; break; } if(nCode >= && nCode <= ) { strValue = @"YING"; break; } if(nCode==) { strValue = @"YO"; break; } if(nCode >= && nCode <= ) { strValue = @"YONG"; break; } if(nCode >= && nCode <= ) { strValue = @"YOU"; break; } if(nCode >= && nCode <= ) { strValue = @"YU"; break; } if(nCode >= && nCode <= ) { strValue = @"YUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"YUE"; break; } if(nCode >= && nCode <= ) { strValue = @"YUN"; break; } if(nCode >= && nCode <= ) { strValue = @"ZA"; break; } if(nCode >= && nCode <= ) { strValue = @"ZAI"; break; } if(nCode >= && nCode <= ) { strValue = @"ZAN"; break; } if(nCode >= && nCode <= ) { strValue = @"ZANG"; break; } if(nCode >= && nCode <= ) { strValue = @"ZAO"; break; } if(nCode >= && nCode <= ) { strValue = @"ZE"; break; } if(nCode==) { strValue = @"ZEI"; break; } if(nCode==) { strValue = @"ZEN"; break; } if(nCode >= && nCode <= ) { strValue = @"ZENG"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHA"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHAI"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHAN"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHANG"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHAO"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHE"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHEN"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHENG"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHI"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHONG"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHOU"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHU"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHUA"; break; } if(nCode==) { strValue = @"ZHUAI"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHUANG"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHUI"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHUN"; break; } if(nCode >= && nCode <= ) { strValue = @"ZHUO"; break; } if(nCode >= && nCode <= ) { strValue = @"ZI"; break; } if(nCode >= && nCode <= ) { strValue = @"ZONG"; break; } if(nCode >= && nCode <= ) { strValue = @"ZOU"; break; } if(nCode >= && nCode <= ) { strValue = @"ZU"; break; } if(nCode >= && nCode <= ) { strValue = @"ZUAN"; break; } if(nCode >= && nCode <= ) { strValue = @"ZUI"; break; } if(nCode >= && nCode <= ) { strValue = @"ZUN"; break; } if(nCode >= && nCode <= )
{
strValue = @"ZUO";
break;
}
}
return strValue;
}

#define HANZI_START 19968
#define HANZI_COUNT 20902

static char firstLetterArray[HANZI_COUNT] =
"ydkqsxnwzssxjbymgcczqpssqbycdscdqldylybssjgyqzjjfgcclzznwdwzjljpfyynnjjtmynzwzhflzppqhgccyynmjqyxxgd"
"nnsnsjnjnsnnmlnrxyfsngnnnnqzggllyjlnyzssecykyyhqwjssggyxyqyjtwktjhychmnxjtlhjyqbyxdldwrrjnwysrldzjpc"
"bzjjbrcfslnczstzfxxchtrqggddlyccssymmrjcyqzpwwjjyfcrwfdfzqpyddwyxkyjawjffxjbcftzyhhycyswccyxsclcxxwz"
"cxnbgnnxbxlzsqsbsjpysazdhmdzbqbscwdzzyytzhbtsyyfzgntnxjywqnknphhlxgybfmjnbjhhgqtjcysxstkzglyckglysmz"
"xyalmeldccxgzyrjxjzlnjzcqkcnnjwhjczccqljststbnhbtyxceqxkkwjyflzqlyhjxspsfxlmpbysxxxytccnylllsjxfhjxp"
"jbtffyabyxbcczbzyclwlczggbtssmdtjcxpthyqtgjjxcjfzkjzjqnlzwlslhdzbwjncjzyzsqnycqynzcjjwybrtwpyftwexcs"
"kdzctbyhyzqyyjxzcfbzzmjyxxsdczottbzljwfckscsxfyrlrygmbdthjxsqjccsbxyytswfbjdztnbcnzlcyzzpsacyzzsqqcs"
"hzqydxlbpjllmqxqydzxsqjtzpxlcglqdcwzfhctdjjsfxjejjtlbgxsxjmyjjqpfzasyjnsydjxkjcdjsznbartcclnjqmwnqnc"
"lllkbdbzzsyhqcltwlccrshllzntylnewyzyxczxxgdkdmtcedejtsyyssdqdfmxdbjlkrwnqlybglxnlgtgxbqjdznyjsjyjcjm"
"rnymgrcjczgjmzmgxmmryxkjnymsgmzzymknfxmbdtgfbhcjhkylpfmdxlxjjsmsqgzsjlqdldgjycalcmzcsdjllnxdjffffjcn" //
"fnnffpfkhkgdpqxktacjdhhzdddrrcfqyjkqccwjdxhwjlyllzgcfcqjsmlzpbjjblsbcjggdckkdezsqcckjgcgkdjtjllzycxk"
"lqccgjcltfpcqczgwbjdqyzjjbyjhsjddwgfsjgzkcjctllfspkjgqjhzzljplgjgjjthjjyjzccmlzlyqbgjwmljkxzdznjqsyz"
"mljlljkywxmkjlhskjhbmclyymkxjqlbmllkmdxxkwyxwslmlpsjqqjqxyqfjtjdxmxxllcrqbsyjbgwynnggbcnxpjtgpapfgdj"
"qbhbncfjyzjkjkhxqfgqckfhygkhdkllsdjqxpqyaybnqsxqnszswhbsxwhxwbzzxdmndjbsbkbbzklylxgwxjjwaqzmywsjqlsj"
"xxjqwjeqxnchetlzalyyyszzpnkyzcptlshtzcfycyxyljsdcjqagyslcllyyysslqqqnldxzsccscadycjysfsgbfrsszqsbxjp"
"sjysdrckgjlgtkzjzbdktcsyqpyhstcldjnhmymcgxyzhjdctmhltxzhylamoxyjcltyfbqqjpfbdfehthsqhzywwcncxcdwhowg"
"yjlegmdqcwgfjhcsntmydolbygnqwesqpwnmlrydzszzlyqpzgcwxhnxpyxshmdqjgztdppbfbhzhhjyfdzwkgkzbldnzsxhqeeg"
"zxylzmmzyjzgszxkhkhtxexxgylyapsthxdwhzydpxagkydxbhnhnkdnjnmyhylpmgecslnzhkxxlbzzlbmlsfbhhgsgyyggbhsc"
"yajtxglxtzmcwzydqdqmngdnllszhngjzwfyhqswscelqajynytlsxthaznkzzsdhlaxxtwwcjhqqtddwzbcchyqzflxpslzqgpz"
"sznglydqtbdlxntctajdkywnsyzljhhdzckryyzywmhychhhxhjkzwsxhdnxlyscqydpslyzwmypnkxyjlkchtyhaxqsyshxasmc"
"hkdscrsgjpwqsgzjlwwschsjhsqnhnsngndantbaalczmsstdqjcjktscjnxplggxhhgoxzcxpdmmhldgtybynjmxhmrzplxjzck"
"zxshflqxxcdhxwzpckczcdytcjyxqhlxdhypjqxnlsyydzozjnhhqezysjyayxkypdgxddnsppyzndhthrhxydpcjjhtcnnctlhb"
"ynyhmhzllnnxmylllmdcppxhmxdkycyrdltxjchhznxclcclylnzsxnjzzlnnnnwhyqsnjhxynttdkyjpychhyegkcwtwlgjrlgg"
"tgtygyhpyhylqyqgcwyqkpyyettttlhyylltyttsylnyzwgywgpydqqzzdqnnkcqnmjjzzbxtqfjkdffbtkhzkbxdjjkdjjtlbwf"
"zpptkqtztgpdwntpjyfalqmkgxbcclzfhzcllllanpnxtjklcclgyhdzfgyddgcyyfgydxkssendhykdndknnaxxhbpbyyhxccga"
"pfqyjjdmlxcsjzllpcnbsxgjyndybwjspcwjlzkzddtacsbkzdyzypjzqsjnkktknjdjgyepgtlnyqnacdntcyhblgdzhbbydmjr"
"egkzyheyybjmcdtafzjzhgcjnlghldwxjjkytcyksssmtwcttqzlpbszdtwcxgzagyktywxlnlcpbclloqmmzsslcmbjcsdzkydc"
"zjgqjdsmcytzqqlnzqzxssbpkdfqmddzzsddtdmfhtdycnaqjqkypbdjyyxtljhdrqxlmhkydhrnlklytwhllrllrcxylbnsrnzz"
"symqzzhhkyhxksmzsyzgcxfbnbsqlfzxxnnxkxwymsddyqnggqmmyhcdzttfgyyhgsbttybykjdnkyjbelhdypjqnfxfdnkzhqks"
"byjtzbxhfdsbdaswpawajldyjsfhblcnndnqjtjnchxfjsrfwhzfmdrfjyxwzpdjkzyjympcyznynxfbytfyfwygdbnzzzdnytxz"
"emmqbsqehxfznbmflzzsrsyqjgsxwzjsprytjsjgskjjgljjynzjjxhgjkymlpyyycxycgqzswhwlyrjlpxslcxmnsmwklcdnkny"
"npsjszhdzeptxmwywxyysywlxjqcqxzdclaeelmcpjpclwbxsqhfwrtfnjtnqjhjqdxhwlbyccfjlylkyynldxnhycstyywncjtx"
"ywtrmdrqnwqcmfjdxzmhmayxnwmyzqtxtlmrspwwjhanbxtgzypxyyrrclmpamgkqjszycymyjsnxtplnbappypylxmyzkynldgy"
"jzcchnlmzhhanqnbgwqtzmxxmllhgdzxnhxhrxycjmffxywcfsbssqlhnndycannmtcjcypnxnytycnnymnmsxndlylysljnlxys"
"sqmllyzlzjjjkyzzcsfbzxxmstbjgnxnchlsnmcjscyznfzlxbrnnnylmnrtgzqysatswryhyjzmgdhzgzdwybsscskxsyhytsxg"
"cqgxzzbhyxjscrhmkkbsczjyjymkqhzjfnbhmqhysnjnzybknqmcjgqhwlsnzswxkhljhyybqcbfcdsxdldspfzfskjjzwzxsddx"
"jseeegjscssygclxxnwwyllymwwwgydkzjggggggsycknjwnjpcxbjjtqtjwdsspjxcxnzxnmelptfsxtllxcljxjjljsxctnswx"
"lennlyqrwhsycsqnybyaywjejqfwqcqqcjqgxaldbzzyjgkgxbltqyfxjltpydkyqhpmatlcndnkxmtxynhklefxdllegqtymsaw"
"hzmljtkynxlyjzljeeyybqqffnlyxhdsctgjhxywlkllxqkcctnhjlqmkkzgcyygllljdcgydhzwypysjbzjdzgyzzhywyfqdtyz"
"szyezklymgjjhtsmqwyzljyywzcsrkqyqltdxwcdrjalwsqzwbdcqyncjnnszjlncdcdtlzzzacqqzzddxyblxcbqjylzllljddz"
"jgyqyjzyxnyyyexjxksdaznyrdlzyyynjlslldyxjcykywnqcclddnyyynycgczhjxcclgzqjgnwnncqqjysbzzxyjxjnxjfzbsb"
"dsfnsfpzxhdwztdmpptflzzbzdmyypqjrsdzsqzsqxbdgcpzswdwcsqzgmdhzxmwwfybpngphdmjthzsmmbgzmbzjcfzhfcbbnmq"
"dfmbcmcjxlgpnjbbxgyhyyjgptzgzmqbqdcgybjxlwnkydpdymgcftpfxyztzxdzxtgkptybbclbjaskytssqyymscxfjhhlslls"
"jpqjjqaklyldlycctsxmcwfgngbqxllllnyxtyltyxytdpjhnhgnkbyqnfjyyzbyyessessgdyhfhwtcqbsdzjtfdmxhcnjzymqw"
"srxjdzjqbdqbbsdjgnfbknbxdkqhmkwjjjgdllthzhhyyyyhhsxztyyyccbdbpypzyccztjpzywcbdlfwzcwjdxxhyhlhwczxjtc"
"nlcdpxnqczczlyxjjcjbhfxwpywxzpcdzzbdccjwjhmlxbqxxbylrddgjrrctttgqdczwmxfytmmzcwjwxyywzzkybzcccttqnhx"
"nwxxkhkfhtswoccjybcmpzzykbnnzpbthhjdlszddytyfjpxyngfxbyqxzbhxcpxxtnzdnnycnxsxlhkmzxlthdhkghxxsshqyhh"
"cjyxglhzxcxnhekdtgqxqypkdhentykcnymyyjmkqyyyjxzlthhqtbyqhxbmyhsqckwwyllhcyylnneqxqwmcfbdccmljggxdqkt"
"lxkknqcdgcjwyjjlyhhqyttnwchhxcxwherzjydjccdbqcdgdnyxzdhcqrxcbhztqcbxwgqwyybxhmbymykdyecmqkyaqyngyzsl"
"fnkkqgyssqyshngjctxkzycssbkyxhyylstycxqthysmnscpmmgcccccmnztasmgqzjhklosjylswtmqzyqkdzljqqyplzycztcq"
"qpbbcjzclpkhqcyyxxdtdddsjcxffllchqxmjlwcjcxtspycxndtjshjwhdqqqckxyamylsjhmlalygxcyydmamdqmlmcznnyybz"
"xkyflmcncmlhxrcjjhsylnmtjggzgywjxsrxcwjgjqhqzdqjdcjjskjkgdzcgjjyjylxzxxcdqhhheslmhlfsbdjsyyshfyssczq"
"lpbdrfnztzdkykhsccgkwtqzckmsynbcrxqbjyfaxpzzedzcjykbcjwhyjbqzzywnyszptdkzpfpbaztklqnhbbzptpptyzzybhn"
"ydcpzmmcycqmcjfzzdcmnlfpbplngqjtbttajzpzbbdnjkljqylnbzqhksjznggqstzkcxchpzsnbcgzkddzqanzgjkdrtlzldwj"
"njzlywtxndjzjhxnatncbgtzcsskmljpjytsnwxcfjwjjtkhtzplbhsnjssyjbhbjyzlstlsbjhdnwqpslmmfbjdwajyzccjtbnn"
"nzwxxcdslqgdsdpdzgjtqqpsqlyyjzlgyhsdlctcbjtktyczjtqkbsjlgnnzdncsgpynjzjjyyknhrpwszxmtncszzyshbyhyzax"
"ywkcjtllckjjtjhgcssxyqyczbynnlwqcglzgjgqyqcczssbcrbcskydznxjsqgxssjmecnstjtpbdlthzwxqwqczexnqczgwesg"
"ssbybstscslccgbfsdqnzlccglllzghzcthcnmjgyzazcmsksstzmmzckbjygqljyjppldxrkzyxccsnhshhdznlzhzjjcddcbcj"
"xlbfqbczztpqdnnxljcthqzjgylklszzpcjdscqjhjqkdxgpbajynnsmjtzdxlcjyryynhjbngzjkmjxltbsllrzpylssznxjhll"
"hyllqqzqlsymrcncxsljmlzltzldwdjjllnzggqxppskyggggbfzbdkmwggcxmcgdxjmcjsdycabxjdlnbcddygskydqdxdjjyxh"
"saqazdzfslqxxjnqzylblxxwxqqzbjzlfbblylwdsljhxjyzjwtdjcyfqzqzzdzsxzzqlzcdzfxhwspynpqzmlpplffxjjnzzyls"
"jnyqzfpfzgsywjjjhrdjzzxtxxglghtdxcskyswmmtcwybazbjkshfhgcxmhfqhyxxyzftsjyzbxyxpzlchmzmbxhzzssyfdmncw"
"dabazlxktcshhxkxjjzjsthygxsxyyhhhjwxkzxssbzzwhhhcwtzzzpjxsyxqqjgzyzawllcwxznxgyxyhfmkhydwsqmnjnaycys"
"pmjkgwcqhylajgmzxhmmcnzhbhxclxdjpltxyjkdyylttxfqzhyxxsjbjnayrsmxyplckdnyhlxrlnllstycyyqygzhhsccsmcct"
"zcxhyqfpyyrpbflfqnntszlljmhwtcjqyzwtlnmlmdwmbzzsnzrbpdddlqjjbxtcsnzqqygwcsxfwzlxccrszdzmcyggdyqsgtnn"
"nlsmymmsyhfbjdgyxccpshxczcsbsjyygjmpbwaffyfnxhydxzylremzgzzyndsznlljcsqfnxxkptxzgxjjgbmyyssnbtylbnlh"
"bfzdcyfbmgqrrmzszxysjtznnydzzcdgnjafjbdknzblczszpsgcycjszlmnrznbzzldlnllysxsqzqlcxzlsgkbrxbrbzcycxzj"
"zeeyfgklzlnyhgzcgzlfjhgtgwkraajyzkzqtsshjjxdzyznynnzyrzdqqhgjzxsszbtkjbbfrtjxllfqwjgclqtymblpzdxtzag"
"bdhzzrbgjhwnjtjxlkscfsmwlldcysjtxkzscfwjlbnntzlljzllqblcqmqqcgcdfpbphzczjlpyyghdtgwdxfczqyyyqysrclqz"
"fklzzzgffcqnwglhjycjjczlqzzyjbjzzbpdcsnnjgxdqnknlznnnnpsntsdyfwwdjzjysxyyczcyhzwbbyhxrylybhkjksfxtjj"
"mmchhlltnyymsxxyzpdjjycsycwmdjjkqyrhllngpngtlyycljnnnxjyzfnmlrgjjtyzbsyzmsjyjhgfzqmsyxrszcytlrtqzsst"
"kxgqkgsptgxdnjsgcqcqhmxggztqydjjznlbznxqlhyqgggthqscbyhjhhkyygkggcmjdzllcclxqsftgjslllmlcskctbljszsz"
"mmnytpzsxqhjcnnqnyexzqzcpshkzzyzxxdfgmwqrllqxrfztlystctmjcsjjthjnxtnrztzfqrhcgllgcnnnnjdnlnnytsjtlny"
"xsszxcgjzyqpylfhdjsbbdczgjjjqzjqdybssllcmyttmqnbhjqmnygjyeqyqmzgcjkpdcnmyzgqllslnclmholzgdylfzslncnz"
"lylzcjeshnyllnxnjxlyjyyyxnbcljsswcqqnnyllzldjnllzllbnylnqchxyyqoxccqkyjxxxyklksxeyqhcqkkkkcsnyxxyqxy"
"gwtjohthxpxxhsnlcykychzzcbwqbbwjqcscszsslcylgddsjzmmymcytsdsxxscjpqqsqylyfzychdjynywcbtjsydchcyddjlb"
"djjsodzyqyskkyxdhhgqjyohdyxwgmmmazdybbbppbcmnnpnjzsmtxerxjmhqdntpjdcbsnmssythjtslmltrcplzszmlqdsdmjm"
"qpnqdxcfrnnfsdqqyxhyaykqyddlqyyysszbydslntfgtzqbzmchdhczcwfdxtmqqsphqwwxsrgjcwnntzcqmgwqjrjhtqjbbgwz"
"fxjhnqfxxqywyyhyccdydhhqmrmtmwctbszppzzglmzfollcfwhmmsjzttdhlmyffytzzgzyskjjxqyjzqbhmbzclyghgfmshpcf"
"zsnclpbqsnjyzslxxfpmtyjygbxlldlxpzjyzjyhhzcywhjylsjexfszzywxkzjlnadymlymqjpwxxhxsktqjezrpxxzghmhwqpw"
"qlyjjqjjzszcnhjlchhnxjlqwzjhbmzyxbdhhypylhlhlgfwlcfyytlhjjcwmscpxstkpnhjxsntyxxtestjctlsslstdlllwwyh"
"dnrjzsfgxssyczykwhtdhwjglhtzdqdjzxxqgghltzphcsqfclnjtclzpfstpdynylgmjllycqhynspchylhqyqtmzymbywrfqyk"
"jsyslzdnjmpxyyssrhzjnyqtqdfzbwwdwwrxcwggyhxmkmyyyhmxmzhnksepmlqqmtcwctmxmxjpjjhfxyyzsjzhtybmstsyjznq"
"jnytlhynbyqclcycnzwsmylknjxlggnnpjgtysylymzskttwlgsmzsylmpwlcwxwqcssyzsyxyrhssntsrwpccpwcmhdhhxzdzyf"
"jhgzttsbjhgyglzysmyclllxbtyxhbbzjkssdmalhhycfygmqypjyjqxjllljgclzgqlycjcctotyxmtmshllwlqfxymzmklpszz"
"cxhkjyclctyjcyhxsgyxnnxlzwpyjpxhjwpjpwxqqxlxsdhmrslzzydwdtcxknstzshbsccstplwsscjchjlcgchssphylhfhhxj"
"sxallnylmzdhzxylsxlmzykcldyahlcmddyspjtqjzlngjfsjshctsdszlblmssmnyymjqbjhrzwtyydchjljapzwbgqxbkfnbjd"
"llllyylsjydwhxpsbcmljpscgbhxlqhyrljxyswxhhzlldfhlnnymjljyflyjycdrjlfsyzfsllcqyqfgqyhnszlylmdtdjcnhbz"
"llnwlqxygyyhbmgdhxxnhlzzjzxczzzcyqzfngwpylcpkpykpmclgkdgxzgxwqbdxzzkzfbddlzxjtpjpttbythzzdwslcpnhslt"
"jxxqlhyxxxywzyswttzkhlxzxzpyhgzhknfsyhntjrnxfjcpjztwhplshfcrhnslxxjxxyhzqdxqwnnhyhmjdbflkhcxcwhjfyjc"
"fpqcxqxzyyyjygrpynscsnnnnchkzdyhflxxhjjbyzwttxnncyjjymswyxqrmhxzwfqsylznggbhyxnnbwttcsybhxxwxyhhxyxn"
"knyxmlywrnnqlxbbcljsylfsytjzyhyzawlhorjmnsczjxxxyxchcyqryxqzddsjfslyltsffyxlmtyjmnnyyyxltzcsxqclhzxl"
"wyxzhnnlrxkxjcdyhlbrlmbrdlaxksnlljlyxxlynrylcjtgncmtlzllcyzlpzpzyawnjjfybdyyzsepckzzqdqpbpsjpdyttbdb"
"bbyndycncpjmtmlrmfmmrwyfbsjgygsmdqqqztxmkqwgxllpjgzbqrdjjjfpkjkcxbljmswldtsjxldlppbxcwkcqqbfqbccajzg"
"mykbhyhhzykndqzybpjnspxthlfpnsygyjdbgxnhhjhzjhstrstldxskzysybmxjlxyslbzyslzxjhfybqnbylljqkygzmcyzzym"
"ccslnlhzhwfwyxzmwyxtynxjhbyymcysbmhysmydyshnyzchmjjmzcaahcbjbbhblytylsxsnxgjdhkxxtxxnbhnmlngsltxmrhn"
"lxqqxmzllyswqgdlbjhdcgjyqyymhwfmjybbbyjyjwjmdpwhxqldyapdfxxbcgjspckrssyzjmslbzzjfljjjlgxzgyxyxlszqkx"
"bexyxhgcxbpndyhwectwwcjmbtxchxyqqllxflyxlljlssnwdbzcmyjclwswdczpchqekcqbwlcgydblqppqzqfnqdjhymmcxtxd"
"rmzwrhxcjzylqxdyynhyyhrslnrsywwjjymtltllgtqcjzyabtckzcjyccqlysqxalmzynywlwdnzxqdllqshgpjfjljnjabcqzd"
"jgthhsstnyjfbswzlxjxrhgldlzrlzqzgsllllzlymxxgdzhgbdphzpbrlwnjqbpfdwonnnhlypcnjccndmbcpbzzncyqxldomzb"
"lzwpdwyygdstthcsqsccrsssyslfybnntyjszdfndpdhtqzmbqlxlcmyffgtjjqwftmnpjwdnlbzcmmcngbdzlqlpnfhyymjylsd"
"chdcjwjcctljcldtljjcbddpndsszycndbjlggjzxsxnlycybjjxxcbylzcfzppgkcxqdzfztjjfjdjxzbnzyjqctyjwhdyczhym"
"djxttmpxsplzcdwslshxypzgtfmlcjtacbbmgdewycyzxdszjyhflystygwhkjyylsjcxgywjcbllcsnddbtzbsclyzczzssqdll"
"mjyyhfllqllxfdyhabxggnywyypllsdldllbjcyxjznlhljdxyyqytdlllbngpfdfbbqbzzmdpjhgclgmjjpgaehhbwcqxajhhhz"
"chxyphjaxhlphjpgpzjqcqzgjjzzgzdmqyybzzphyhybwhazyjhykfgdpfqsdlzmljxjpgalxzdaglmdgxmmzqwtxdxxpfdmmssy"
"mpfmdmmkxksyzyshdzkjsysmmzzzmdydyzzczxbmlstmdyemxckjmztyymzmzzmsshhdccjewxxkljsthwlsqlyjzllsjssdppmh"
"nlgjczyhmxxhgncjmdhxtkgrmxfwmckmwkdcksxqmmmszzydkmsclcmpcjmhrpxqpzdsslcxkyxtwlkjyahzjgzjwcjnxyhmmbml"
"gjxmhlmlgmxctkzmjlyscjsyszhsyjzjcdajzhbsdqjzgwtkqxfkdmsdjlfmnhkzqkjfeypzyszcdpynffmzqykttdzzefmzlbnp"
"plplpbpszalltnlkckqzkgenjlwalkxydpxnhsxqnwqnkxqclhyxxmlnccwlymqyckynnlcjnszkpyzkcqzqljbdmdjhlasqlbyd"
"wqlwdgbqcryddztjybkbwszdxdtnpjdtcnqnfxqqmgnseclstbhpwslctxxlpwydzklnqgzcqapllkqcylbqmqczqcnjslqzdjxl"
"ddhpzqdljjxzqdjyzhhzlkcjqdwjppypqakjyrmpzbnmcxkllzllfqpylllmbsglzysslrsysqtmxyxzqzbscnysyztffmzzsmzq"
"hzssccmlyxwtpzgxzjgzgsjzgkddhtqggzllbjdzlsbzhyxyzhzfywxytymsdnzzyjgtcmtnxqyxjscxhslnndlrytzlryylxqht"
"xsrtzcgyxbnqqzfhykmzjbzymkbpnlyzpblmcnqyzzzsjztjctzhhyzzjrdyzhnfxklfzslkgjtctssyllgzrzbbjzzklpkbczys"
"nnyxbjfbnjzzxcdwlzyjxzzdjjgggrsnjkmsmzjlsjywqsnyhqjsxpjztnlsnshrnynjtwchglbnrjlzxwjqxqkysjycztlqzybb"
"ybyzjqdwgyzcytjcjxckcwdkkzxsnkdnywwyyjqyytlytdjlxwkcjnklccpzcqqdzzqlcsfqchqqgssmjzzllbjjzysjhtsjdysj"
"qjpdszcdchjkjzzlpycgmzndjxbsjzzsyzyhgxcpbjydssxdzncglqmbtsfcbfdzdlznfgfjgfsmpnjqlnblgqcyyxbqgdjjqsrf"
"kztjdhczklbsdzcfytplljgjhtxzcsszzxstjygkgckgynqxjplzbbbgcgyjzgczqszlbjlsjfzgkqqjcgycjbzqtldxrjnbsxxp"
"zshszycfwdsjjhxmfczpfzhqhqmqnknlyhtycgfrzgnqxcgpdlbzcsczqlljblhbdcypscppdymzzxgyhckcpzjgslzlnscnsldl"
"xbmsdlddfjmkdqdhslzxlsznpqpgjdlybdskgqlbzlnlkyyhzttmcjnqtzzfszqktlljtyyllnllqyzqlbdzlslyyzxmdfszsnxl"
"xznczqnbbwskrfbcylctnblgjpmczzlstlxshtzcyzlzbnfmqnlxflcjlyljqcbclzjgnsstbrmhxzhjzclxfnbgxgtqncztmsfz"
"kjmssncljkbhszjntnlzdntlmmjxgzjyjczxyhyhwrwwqnztnfjscpyshzjfyrdjsfscjzbjfzqzchzlxfxsbzqlzsgyftzdcszx"
"zjbjpszkjrhxjzcgbjkhcggtxkjqglxbxfgtrtylxqxhdtsjxhjzjjcmzlcqsbtxwqgxtxxhxftsdkfjhzyjfjxnzldlllcqsqqz"
"qwqxswqtwgwbzcgcllqzbclmqjtzgzyzxljfrmyzflxnsnxxjkxrmjdzdmmyxbsqbhgzmwfwygmjlzbyytgzyccdjyzxsngnyjyz"
"nbgpzjcqsyxsxrtfyzgrhztxszzthcbfclsyxzlzqmzlmplmxzjssfsbysmzqhxxnxrxhqzzzsslyflczjrcrxhhzxqndshxsjjh"
"qcjjbcynsysxjbqjpxzqplmlxzkyxlxcnlcycxxzzlxdlllmjyhzxhyjwkjrwyhcpsgnrzlfzwfzznsxgxflzsxzzzbfcsyjdbrj"
"krdhhjxjljjtgxjxxstjtjxlyxqfcsgswmsbctlqzzwlzzkxjmltmjyhsddbxgzhdlbmyjfrzfcgclyjbpmlysmsxlszjqqhjzfx"
"gfqfqbphngyyqxgztnqwyltlgwgwwhnlfmfgzjmgmgbgtjflyzzgzyzaflsspmlbflcwbjztljjmzlpjjlymqtmyyyfbgygqzgly"
"zdxqyxrqqqhsxyyqxygjtyxfsfsllgnqcygycwfhcccfxpylypllzqxxxxxqqhhsshjzcftsczjxspzwhhhhhapylqnlpqafyhxd"
"ylnkmzqgggddesrenzltzgchyppcsqjjhclljtolnjpzljlhymhezdydsqycddhgznndzclzywllznteydgnlhslpjjbdgwxpcnn"
"tycklkclwkllcasstknzdnnjttlyyzssysszzryljqkcgdhhyrxrzydgrgcwcgzqffbppjfzynakrgywyjpqxxfkjtszzxswzddf"
"bbqtbgtzkznpzfpzxzpjszbmqhkyyxyldkljnypkyghgdzjxxeaxpnznctzcmxcxmmjxnkszqnmnlwbwwqjjyhclstmcsxnjcxxt"
"pcnfdtnnpglllzcjlspblpgjcdtnjjlyarscffjfqwdpgzdwmrzzcgodaxnssnyzrestyjwjyjdbcfxnmwttbqlwstszgybljpxg"
"lbnclgpcbjftmxzljylzxcltpnclcgxtfzjshcrxsfysgdkntlbyjcyjllstgqcbxnhzxbxklylhzlqzlnzcqwgzlgzjncjgcmnz"
"zgjdzxtzjxycyycxxjyyxjjxsssjstsstdppghtcsxwzdcsynptfbchfbblzjclzzdbxgcjlhpxnfzflsyltnwbmnjhszbmdnbcy"
"sccldnycndqlyjjhmqllcsgljjsyfpyyccyltjantjjpwycmmgqyysxdxqmzhszxbftwwzqswqrfkjlzjqqyfbrxjhhfwjgzyqac"
"myfrhcyybynwlpexcczsyyrlttdmqlrkmpbgmyyjprkznbbsqyxbhyzdjdnghpmfsgbwfzmfqmmbzmzdcgjlnnnxyqgmlrygqccy"
"xzlwdkcjcggmcjjfyzzjhycfrrcmtznzxhkqgdjxccjeascrjthpljlrzdjrbcqhjdnrhylyqjsymhzydwcdfryhbbydtssccwbx"
"glpzmlzjdqsscfjmmxjcxjytycghycjwynsxlfemwjnmkllswtxhyyyncmmcyjdqdjzglljwjnkhpzggflccsczmcbltbhbqjxqd"
"jpdjztghglfjawbzyzjltstdhjhctcbchflqmpwdshyytqwcnntjtlnnmnndyyyxsqkxwyyflxxnzwcxypmaelyhgjwzzjbrxxaq"
"jfllpfhhhytzzxsgqjmhspgdzqwbwpjhzjdyjcqwxkthxsqlzyymysdzgnqckknjlwpnsyscsyzlnmhqsyljxbcxtlhzqzpcycyk"
"pppnsxfyzjjrcemhszmnxlxglrwgcstlrsxbygbzgnxcnlnjlclynymdxwtzpalcxpqjcjwtcyyjlblxbzlqmyljbghdslssdmxm"
"bdczsxyhamlczcpjmcnhjyjnsykchskqmczqdllkablwjqsfmocdxjrrlyqchjmybyqlrhetfjzfrfksryxfjdwtsxxywsqjysly"
"xwjhsdlxyyxhbhawhwjcxlmyljcsqlkydttxbzslfdxgxsjkhsxxybssxdpwncmrptqzczenygcxqfjxkjbdmljzmqqxnoxslyxx"
"lylljdzptymhbfsttqqwlhsgynlzzalzxclhtwrrqhlstmypyxjjxmnsjnnbryxyjllyqyltwylqyfmlkljdnlltfzwkzhljmlhl"
"jnljnnlqxylmbhhlnlzxqchxcfxxlhyhjjgbyzzkbxscqdjqdsndzsygzhhmgsxcsymxfepcqwwrbpyyjqryqcyjhqqzyhmwffhg"
"zfrjfcdbxntqyzpcyhhjlfrzgpbxzdbbgrqstlgdgylcqmgchhmfywlzyxkjlypjhsywmqqggzmnzjnsqxlqsyjtcbehsxfszfxz"
"wfllbcyyjdytdthwzsfjmqqyjlmqsxlldttkghybfpwdyysqqrnqwlgwdebzwcyygcnlkjxtmxmyjsxhybrwfymwfrxyymxysctz"
"ztfykmldhqdlgyjnlcryjtlpsxxxywlsbrrjwxhqybhtydnhhxmmywytycnnmnssccdalwztcpqpyjllqzyjswjwzzmmglmxclmx"
"nzmxmzsqtzppjqblpgxjzhfljjhycjsrxwcxsncdlxsyjdcqzxslqyclzxlzzxmxqrjmhrhzjbhmfljlmlclqnldxzlllfyprgjy"
"nxcqqdcmqjzzxhnpnxzmemmsxykynlxsxtljxyhwdcwdzhqyybgybcyscfgfsjnzdrzzxqxrzrqjjymcanhrjtldbpyzbstjhxxz"
"ypbdwfgzzrpymnnkxcqbyxnbnfyckrjjcmjegrzgyclnnzdnkknsjkcljspgyyclqqjybzssqlllkjftbgtylcccdblsppfylgyd"
"tzjqjzgkntsfcxbdkdxxhybbfytyhbclnnytgdhryrnjsbtcsnyjqhklllzslydxxwbcjqsbxnpjzjzjdzfbxxbrmladhcsnclbj"
"dstblprznswsbxbcllxxlzdnzsjpynyxxyftnnfbhjjjgbygjpmmmmsszljmtlyzjxswxtyledqpjmpgqzjgdjlqjwjqllsdgjgy"
"gmscljjxdtygjqjjjcjzcjgdzdshqgzjggcjhqxsnjlzzbxhsgzxcxyljxyxyydfqqjhjfxdhctxjyrxysqtjxyefyyssyxjxncy"
"zxfxcsxszxyyschshxzzzgzzzgfjdldylnpzgsjaztyqzpbxcbdztzczyxxyhhscjshcggqhjhgxhsctmzmehyxgebtclzkkwytj"
"zrslekestdbcyhqqsayxcjxwwgsphjszsdncsjkqcxswxfctynydpccczjqtcwjqjzzzqzljzhlsbhpydxpsxshhezdxfptjqyzc"
"xhyaxncfzyyhxgnqmywntzsjbnhhgymxmxqcnssbcqsjyxxtyyhybcqlmmszmjzzllcogxzaajzyhjmchhcxzsxsdznleyjjzjbh"
"zwjzsqtzpsxzzdsqjjjlnyazphhyysrnqzthzhnyjyjhdzxzlswclybzyecwcycrylchzhzydzydyjdfrjjhtrsqtxyxjrjhojyn"
"xelxsfsfjzghpzsxzszdzcqzbyyklsgsjhczshdgqgxyzgxchxzjwyqwgyhksseqzzndzfkwyssdclzstsymcdhjxxyweyxczayd"
"mpxmdsxybsqmjmzjmtjqlpjyqzcgqhyjhhhqxhlhdldjqcfdwbsxfzzyyschtytyjbhecxhjkgqfxbhyzjfxhwhbdzfyzbchpnpg"
"dydmsxhkhhmamlnbyjtmpxejmcthqbzyfcgtyhwphftgzzezsbzegpbmdskftycmhbllhgpzjxzjgzjyxzsbbqsczzlzscstpgxm"
"jsfdcczjzdjxsybzlfcjsazfgszlwbczzzbyztzynswyjgxzbdsynxlgzbzfygczxbzhzftpbgzgejbstgkdmfhyzzjhzllzzgjq"
"zlsfdjsscbzgpdlfzfzszyzyzsygcxsnxxchczxtzzljfzgqsqqxcjqccccdjcdszzyqjccgxztdlgscxzsyjjqtcclqdqztqchq"
"qyzynzzzpbkhdjfcjfztypqyqttynlmbdktjcpqzjdzfpjsbnjlgyjdxjdcqkzgqkxclbzjtcjdqbxdjjjstcxnxbxqmslyjcxnt"
"jqwwcjjnjjlllhjcwqtbzqqczczpzzdzyddcyzdzccjgtjfzdprntctjdcxtqzdtjnplzbcllctdsxkjzqdmzlbznbtjdcxfczdb"
"czjjltqqpldckztbbzjcqdcjwynllzlzccdwllxwzlxrxntqjczxkjlsgdnqtddglnlajjtnnynkqlldzntdnycygjwyxdxfrsqs"
"tcdenqmrrqzhhqhdldazfkapbggpzrebzzykyqspeqjjglkqzzzjlysyhyzwfqznlzzlzhwcgkypqgnpgblplrrjyxcccgyhsfzf"
"wbzywtgzxyljczwhncjzplfflgskhyjdeyxhlpllllcygxdrzelrhgklzzyhzlyqszzjzqljzflnbhgwlczcfjwspyxzlzlxgccp"
"zbllcxbbbbnbbcbbcrnnzccnrbbnnldcgqyyqxygmqzwnzytyjhyfwtehznjywlccntzyjjcdedpwdztstnjhtymbjnyjzlxtsst"
"phndjxxbyxqtzqddtjtdyztgwscszqflshlnzbcjbhdlyzjyckwtydylbnydsdsycctyszyyebgexhqddwnygyclxtdcystqnygz"
"ascsszzdzlcclzrqxyywljsbymxshzdembbllyyllytdqyshymrqnkfkbfxnnsbychxbwjyhtqbpbsbwdzylkgzskyghqzjxhxjx"
"gnljkzlyycdxlfwfghljgjybxblybxqpqgntzplncybxdjyqydymrbeyjyyhkxxstmxrczzjwxyhybmcflyzhqyzfwxdbxbcwzms"
"lpdmyckfmzklzcyqycclhxfzlydqzpzygyjyzmdxtzfnnyttqtzhgsfcdmlccytzxjcytjmkslpzhysnwllytpzctzccktxdhxxt"
"qcyfksmqccyyazhtjplylzlyjbjxtfnyljyynrxcylmmnxjsmybcsysslzylljjgyldzdlqhfzzblfndsqkczfyhhgqmjdsxyctt"
"xnqnjpyybfcjtyyfbnxejdgyqbjrcnfyyqpghyjsyzngrhtknlnndzntsmgklbygbpyszbydjzsstjztsxzbhbscsbzczptqfzlq"
"flypybbjgszmnxdjmtsyskkbjtxhjcegbsmjyjzcstmljyxrczqscxxqpyzhmkyxxxjcljyrmyygadyskqlnadhrskqxzxztcggz"
"dlmlwxybwsyctbhjhcfcwzsxwwtgzlxqshnyczjxemplsrcgltnzntlzjcyjgdtclglbllqpjmzpapxyzlaktkdwczzbncctdqqz"
"qyjgmcdxltgcszlmlhbglkznnwzndxnhlnmkydlgxdtwcfrjerctzhydxykxhwfzcqshknmqqhzhhymjdjskhxzjzbzzxympajnm"
"ctbxlsxlzynwrtsqgscbptbsgzwyhtlkssswhzzlyytnxjgmjrnsnnnnlskztxgxlsammlbwldqhylakqcqctmycfjbslxclzjcl"
"xxknbnnzlhjphqplsxsckslnhpsfqcytxjjzljldtzjjzdlydjntptnndskjfsljhylzqqzlbthydgdjfdbyadxdzhzjnthqbykn"
"xjjqczmlljzkspldsclbblnnlelxjlbjycxjxgcnlcqplzlznjtsljgyzdzpltqcssfdmnycxgbtjdcznbgbqyqjwgkfhtnbyqzq"
"gbkpbbyzmtjdytblsqmbsxtbnpdxklemyycjynzdtldykzzxtdxhqshygmzsjycctayrzlpwltlkxslzcggexclfxlkjrtlqjaqz"
"ncmbqdkkcxglczjzxjhptdjjmzqykqsecqzdshhadmlzfmmzbgntjnnlhbyjbrbtmlbyjdzxlcjlpldlpcqdhlhzlycblcxccjad"
"qlmzmmsshmybhbnkkbhrsxxjmxmdznnpklbbrhgghfchgmnklltsyyycqlcskymyehywxnxqywbawykqldnntndkhqcgdqktgpkx"
"hcpdhtwnmssyhbwcrwxhjmkmzngwtmlkfghkjyldyycxwhyyclqhkqhtdqkhffldxqwytyydesbpkyrzpjfyyzjceqdzzdlattpb"
"fjllcxdlmjsdxegwgsjqxcfbssszpdyzcxznyxppzydlyjccpltxlnxyzyrscyyytylwwndsahjsygyhgywwaxtjzdaxysrltdps"
"syxfnejdxyzhlxlllzhzsjnyqyqyxyjghzgjcyjchzlycdshhsgczyjscllnxzjjyyxnfsmwfpyllyllabmddhwzxjmcxztzpmlq"
"chsfwzynctlndywlslxhymmylmbwwkyxyaddxylldjpybpwnxjmmmllhafdllaflbnhhbqqjqzjcqjjdjtffkmmmpythygdrjrdd"
"wrqjxnbysrmzdbyytbjhpymyjtjxaahggdqtmystqxkbtzbkjlxrbyqqhxmjjbdjntgtbxpgbktlgqxjjjcdhxqdwjlwrfmjgwqh"
"cnrxswgbtgygbwhswdwrfhwytjjxxxjyzyslphyypyyxhydqpxshxyxgskqhywbdddpplcjlhqeewjgsyykdpplfjthkjltcyjhh"
"jttpltzzcdlyhqkcjqysteeyhkyzyxxyysddjkllpymqyhqgxqhzrhbxpllnqydqhxsxxwgdqbshyllpjjjthyjkyphthyyktyez"
"yenmdshlzrpqfbnfxzbsftlgxsjbswyysksflxlpplbbblnsfbfyzbsjssylpbbffffsscjdstjsxtryjcyffsyzyzbjtlctsbsd"
"hrtjjbytcxyyeylycbnebjdsysyhgsjzbxbytfzwgenhhhthjhhxfwgcstbgxklstyymtmbyxjskzscdyjrcythxzfhmymcxlzns"
"djtxtxrycfyjsbsdyerxhljxbbdeynjghxgckgscymblxjmsznskgxfbnbbthfjyafxwxfbxmyfhdttcxzzpxrsywzdlybbktyqw"
"qjbzypzjznjpzjlztfysbttslmptzrtdxqsjehbnylndxljsqmlhtxtjecxalzzspktlzkqqyfsyjywpcpqfhjhytqxzkrsgtksq"
"czlptxcdyyzsslzslxlzmacpcqbzyxhbsxlzdltztjtylzjyytbzypltxjsjxhlbmytxcqrblzssfjzztnjytxmyjhlhpblcyxqj"
"qqkzzscpzkswalqsplczzjsxgwwwygyatjbbctdkhqhkgtgpbkqyslbxbbckbmllndzstbklggqkqlzbkktfxrmdkbftpzfrtppm"
"ferqnxgjpzsstlbztpszqzsjdhljqlzbpmsmmsxlqqnhknblrddnhxdkddjcyyljfqgzlgsygmjqjkhbpmxyxlytqwlwjcpbmjxc"
"yzydrjbhtdjyeqshtmgsfyplwhlzffnynnhxqhpltbqpfbjwjdbygpnxtbfzjgnnntjshxeawtzylltyqbwjpgxghnnkndjtmszs"
"qynzggnwqtfhclssgmnnnnynzqqxncjdqgzdlfnykljcjllzlmzznnnnsshthxjlzjbbhqjwwycrdhlyqqjbeyfsjhthnrnwjhwp"
"slmssgzttygrqqwrnlalhmjtqjsmxqbjjzjqzyzkxbjqxbjxshzssfglxmxnxfghkzszggslcnnarjxhnlllmzxelglxydjytlfb"
"kbpnlyzfbbhptgjkwetzhkjjxzxxglljlstgshjjyqlqzfkcgnndjsszfdbctwwseqfhqjbsaqtgypjlbxbmmywxgslzhglsgnyf"
"ljbyfdjfngsfmbyzhqffwjsyfyjjphzbyyzffwotjnlmftwlbzgyzqxcdjygzyyryzynyzwegazyhjjlzrthlrmgrjxzclnnnljj"
"yhtbwjybxxbxjjtjteekhwslnnlbsfazpqqbdlqjjtyyqlyzkdksqjnejzldqcgjqnnjsncmrfqthtejmfctyhypymhydmjncfgy"
"yxwshctxrljgjzhzcyyyjltkttntmjlzclzzayyoczlrlbszywjytsjyhbyshfjlykjxxtmzyyltxxypslqyjzyzyypnhmymdyyl"
"blhlsyygqllnjjymsoycbzgdlyxylcqyxtszegxhzglhwbljheyxtwqmakbpqcgyshhegqcmwyywljyjhyyzlljjylhzyhmgsljl"
"jxcjjyclycjbcpzjzjmmwlcjlnqljjjlxyjmlszljqlycmmgcfmmfpqqmfxlqmcffqmmmmhnznfhhjgtthxkhslnchhyqzxtmmqd"
"cydyxyqmyqylddcyaytazdcymdydlzfffmmycqcwzzmabtbyctdmndzggdftypcgqyttssffwbdttqssystwnjhjytsxxylbyyhh"
"whxgzxwznnqzjzjjqjccchykxbzszcnjtllcqxynjnckycynccqnxyewyczdcjycchyjlbtzyycqwlpgpyllgktltlgkgqbgychj"
"xy";

char pinyinFirstLetter(unsigned short hanzi) {
int index = hanzi - HANZI_START;
if (index >= && index <= HANZI_COUNT) {
return firstLetterArray[index];
} else {
return '#';
}
}

@implementation ChineseToPinyin

  • (NSString *) pinyinFromChiniseString:(NSString *)string {
    if(!string || ![string length]) return nil;

    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding( kCFStringEncodingGB_18030_2000);
    NSData *gb2312_data = [string dataUsingEncoding:enc];

    unsigned char ucHigh, ucLow;
    int nCode;
    NSString *strValue = @"";
    int iLen = [gb2312_data length];
    char *gb2312_string = (char *)[gb2312_data bytes];
    for (int i = ; i < iLen; i++) { if ((unsigned char)gb2312_string[i] < 0x80 ) { strValue = [strValue stringByAppendingFormat:@"%c", gb2312_string[i] > ? gb2312_string[i] - : gb2312_string[i]];
    continue;
    }

    ucHigh = (unsigned char)gb2312\_string\[i\];  
    ucLow  = (unsigned char)gb2312\_string\[i + \];  
    if ( ucHigh < 0xa1 || ucLow < 0xa1)  
        continue;  
    else  
        nCode = (ucHigh - 0xa0) \*  + ucLow - 0xa0;
    
    NSString \*strRes = FindLetter(nCode);  
    strValue = \[strValue stringByAppendingString:strRes\];  
    i++;  

    }
    return [[NSString alloc] initWithString:strValue]
    ;
    }

  • (char) sortSectionTitle:(NSString *)string {
    int cLetter = ;
    if( !string || == [string length] )
    cLetter = '#';
    else {
    if(([string characterAtIndex:] > && [string characterAtIndex:] < ) || ([string characterAtIndex:] > && [string characterAtIndex:] < ) ) {
    cLetter = [string characterAtIndex:];
    } else
    cLetter = pinyinFirstLetter((unsigned short)[string characterAtIndex:]);

    if(cLetter > )  
        cLetter -= ;  

    }
    return cLetter;
    }

@end

ChineseToPinyin文件

其他:

MVC 要根据实际的情况去分模块,做到代码精简,逻辑清晰

修改info里面的Bundle display name 为一个 App设置软件名字

拼音的接口类(封装的类)的使用方法很简单   [ChineseToPinyin pinyinFromChiniseString:self]

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章