第一步:打开你那排序得惨不忍睹的联系人应用程序
第二步:选中要排序的联系人,轻点其右上角的“编辑”按钮进入联系人卡片编辑界面
重点来了!
第三步:手指向上滑动,找到“add field”(加一块说明就好)
iOS分享|如何解决iOS英文系统下通讯录的中文姓名排序问题
第四步:然后选择加上模块的内容,这里有姓氏、名字的音标、缩写等。由于要按照中文姓氏拼音排序,所以这里我们选择“Phonetic Last Name”
iOS分享|如何解决iOS英文系统下通讯录的中文姓名排序问题
第五步:填上拼音吧。如果你和我一样“懒”,就输入姓氏的第一个字母吧(此处可以换成英文输入法,自动大写),然后点击右上角的“完成”保存。
iOS分享|如何解决iOS英文系统下通讯录的中文姓名排序问题
接下来你在联系人姓名界面看到的应该是这个样子:
iOS分享|如何解决iOS英文系统下通讯录的中文姓名排序问题
接着回到通讯录主界面,哈哈哈哈,下图中你发现什么了?
iOS分享|如何解决iOS英文系统下通讯录的中文姓名排序问题
PS 如果你的通讯录里面有好几百甚至上千个记录,这一项工作也可谓是费时费力的。
但是有牛人给出了一劳永逸的方法:
通讯录中文姓名的排序:
进入/System/Library/Frameworks/AddressBookframework
将zh_CNlproj目录下的 ABContactSectionsplist 文件替换到Englishlproj目录下
同理,对于iPod中的中文歌曲的排序(笔者从来不听中文歌,故未测试):
进入/System/Library/PrivateFrameworks/MusicLibraryframework
将zh_CNlproj目录下的MLSectionsplist、SortingDetailsplist文件替换到Englishlproj目录下
欢呼吧。
#include<iostream>
using namespace std;
class student
{
public:
double id;
char name[20];
char sex;
int age;
void set()
{
double a;
char b[20];
char c;
int d;
cin>>a>>b>>c>>d;
id=a;
strcpy(name,b);
sex=c;
age=d;
}
void print()
{
cout<<id<<" "<<name<<" "<<sex<<" "<<age<<endl;
}
};
void main()
{
student stu[5];
cout<<"请输入五名学生的学号、姓名、性别、年龄:"<<endl;
for(int i=0;i<5;i++)
{
stu[i]set();
}
student a;
for(int i=1;i<5;i++)
for(int j=0;j<5-i;j++)
if(stu[j]age<stu[j+1]age)
{
a=stu[j+1];
stu[j+1]=stu[j];
stu[j]=a;
}
cout<<"五名学生从大到小的顺序是:"<<endl;
for(int i=0;i<5;i++)
{
stu[i]print();
}
}
主函数没问题。主要是sort()中排序出错了。
看你两两比较数据,似乎是想用冒泡排序法。
将sort()稍作修改即可:
void sort(char (p)[10],int q)
{
int i,j,m;
char t[10];
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
if((q+j)>(q+j+1))
{
m=(q+j);(q+j)=(q+j+1);(q+j+1)=m;
strcpy(t,(p+j));
strcpy((p+j),(p+j+1));
strcpy((p+j+1),t);
}
}
for(i=0;i<10;i++)
printf("%s %d\n",(p+i),(q+i));
}
我把形参的类型改了,不然会有警告的。
当然,你也可以用顺序排序或插入排序等等方法。C语言书上都有例子的。
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
void add(string a,vector<string>&);
bool Delete(string a,vector<string>&);
void look(vector<string>&);
int main()
{
vector<string>name;
cout<<"1添加"<<endl<<"2删除"<<endl<<"3排序"<<endl<<"4查看"<<endl;
int n;
while(cin>>n)
{
if(n==1)
{
cout<<"输入名字:";
string a;cin>>a;
add(a,name);
}
else if(n==2)
{
cout<<"输入名字:";
string a;cin>>a;
if(Delete(a,name))
{
cout<<"删除成功!"<<endl;
}
else
cout<<"没有此名字,删除失败"<<endl;
}
else if(n==3)
{
sort(namebegin (),nameend());
look(name);
}
else if(n==4)
{
look(name);
}
}
return 0;
}
void add(string a,vector<string>&n)
{
npush_back (a);
}
bool Delete(string a,vector<string>&n)
{
vector<string>::iterator iter=nbegin ();
for(;iter!=nend ();iter++)
{
if(iter==a){iter=nerase(iter);return true;
}
}
return false;
}
void look (vector<string>&n)
{
vector<string>::iterator iter=nbegin ();
for(;iter!=nend ();iter++)
{
cout<<iter<<endl;
}
}
//我随便写写的,写的可能不太清晰。
//给你参考下吧。排序的函数,在<algorthim>有,sort();
main()
{
char st[20],cs[5][20];
int i,j,p;
printf("input name:\n");
for(i=0;i<5;i++)
gets(cs[i]);
printf("\n");
for(i=0;i<5;i++)
{ p=i;strcpy(st,cs[i]);
for(j=i+1;j<5;j++)
if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);}
if(p!=i)
{
strcpy(st,cs[i]);
strcpy(cs[i],cs[p]);
strcpy(cs[p],st);
}
puts(cs[i]);}printf("\n");
}
本程序的第一个for语句中,用gets函数输入五个名字符串。上面说过C语言允许把一个二维数组按多个一维数组处理,本程序说明cs[5][20]为二维字符数组,可分为五个一维数组cs[0],cs[1],cs[2],cs[3],cs[4]。因此在gets函数中使用cs[i]是合法的。 在第二个for语句中又嵌套了一个for语句组成双重循环。这个双重循环完成按字母顺序排序的工作。在外层循环中把字符数组cs[i]中的姓名字符串拷贝到数组st中,并把下标i赋予P。进入内层循环后,把st与cs[i]以后的各字符串作比较,若有比st小者则把该字符串拷贝到st中,并把其下标赋予p。内循环完成后如p不等于i说明有比cs[i]更小的字符串出现,因此交换cs[i]和st的内容。至此已确定了数组cs的第i号元素的排序值。然后输出该字符串。在外循环全部完成之后即完成全部排序和输出。
这个还是自己写写吧,只是简单的链表 *** 作,只是有些繁琐罢了。练习是很重要的。如果实在写不出来的话,我在帮你写一个
采用了有头结点和尾节点的方式来构造链表,偷了点小懒,没有写入文件。此外写了一部分注释,如果还有疑问可以直接发消息给我。
#include<stdioh>
#include<stdlibh>
#include<stringh>
typedef struct Note
{
int id;//查询号
char name[20];
int num;
struct Note next;
}note,no;
typedef struct
{
no head;//头指针
no tail;//尾指针
no current;
no p,q;
int tot;
}LinkNote;
void CreatLink(LinkNote &l)//构造空链表
{
lhead=ltail=(note)malloc(sizeof(note));
lhead=ltail=NULL;
ltot=0;
}
void AddInformation(LinkNote &l)
{
ltot++;//提供ID号
lcurrent=(note)malloc(sizeof(note));
printf("请输入姓名:");
scanf("%s",lcurrent->name);
printf("请输入电话号码:");
scanf("%d",&lcurrent->num );
lcurrent->id=ltot;
if(lhead==NULL)
{
lhead=ltail=lcurrent;
lhead->next=ltail;
ltail->next=NULL;
}
else
{
ltail->next=lcurrent;
lcurrent->next=NULL;
ltail=lcurrent;
}
printf("信息添加成功!!!\n");
}
void InsertInformation(LinkNote &l)
{
int location;
int count=1;
lcurrent=(note)malloc(sizeof(note));
lp=(note)malloc(sizeof(note));
printf("输入要插入的位置号:");
scanf("%d",&location);
if(location>ltot||location<1)
printf("错误\n");
else
{
if(location==ltot )
{
lcurrent=lhead;
while(count++<ltot-1)
lcurrent=lcurrent->next;
lp->next=ltail;
lcurrent->next=lp;
lcurrent=lp;
lcurrent->id=location;
ltail->id+=1;//更新ID
printf("插入成功\n");
}
else if(location==1)
{
lcurrent->next=lhead;
lp=lcurrent->next;
lhead=lcurrent;
while(lp!=NULL)
{
lp->id+=1;
lp=lp->next;
}
lcurrent ->id=location;//更新ID
printf("插入成功\n");
}
else if(location>1&&location<ltot)
{
lcurrent=lhead;
while(count++<=location-2)
lcurrent=lcurrent->next;
lp->next=lcurrent->next;
lq=lp->next;
lcurrent->next=lp;
lcurrent=lp;
while(lq!=NULL)
{
lq->id+=1;
lq=lq->next;
}
lcurrent ->id=location;//更新ID
printf("插入成功\n");
}
printf("输入下列信息:");
printf("姓名:");
scanf("%s",lcurrent->name);
printf("电话号码:");
scanf("%d",&lcurrent->num );
ltot++;
}
}
void SearchInformation(LinkNote &l)
{
if(ltot>0)
{
char findname[20];
int count=0;
int flag;
lp=lhead;
printf("输入姓名:");
scanf("%s",findname);
while(count++<ltot)
{
flag=0;
if(strcmp(findname,lp->name)==0)//字符串的比较
{
flag=1;
break;
}
else
lp=lp->next;
}
if(flag==1)
{
printf("信息找到!\n");
printf("ID 姓名 号码\n");
printf("%d%8s%8d\n",lp->id,lp->name,lp->num );
}
else
printf("无输入的信息\n");
}
else
printf("没有任何信息\n");
}
void DisplayInformation(LinkNote &l)
{
if(ltot>0)
{
int count=0;
lp=lhead;
printf("ID 姓名 电话号码\n");
while(count++<ltot)
{
printf("%d%8s%8d\n",lp->id,lp->name,lp->num );
lp=lp->next;
}
}
else
printf("没有任何信息\n");
}
void DeleteInformation(LinkNote &l)
{
int findid, count=0;
int flag;
int selection;
lp=lhead;
lq=lp;//记录删除节点的前一个节点
if(ltot>0)
{
printf("输入要删除的ID:");
scanf("%d",&findid);
while(count++<ltot)
{
flag=0;
if(findid==lp->id)
{
flag=1;
break;
}
else
{
lq=lp;//记录删除节点的前一个节点
lp=lp->next;
}
}
if(flag==1)
{
printf("信息找到!\n");
printf("ID 姓名 分数\n");
printf("%d%8s%8d\n",lp->id,lp->name,lp->num );
printf("确认删除吗?1删除,2退出\n");
scanf("%d",&selection);
if(selection==1)
{
if(lp==ltail )
{
lq->next=NULL;
ltail=lq;
free(lp);
}
else if(lp==lhead)
{
lq=lp;
lp=lp->next;
lhead=lp;
while(lp!=NULL)
{
lp->id-=1;
lp=lp->next;
}
free(lq);
}
else
{
lq->next=lp->next;
lcurrent=lq->next;
while(lcurrent !=NULL)
{
lcurrent->id-=1;
lcurrent=lcurrent->next;
}
free(lp);
}
ltot--;
}
else
printf("自动退出\n");
}
else
printf("无输入信息\n");
}
else
printf("没有任何信息\n");
}
void ShowInformation()
{
printf("通信录管理系统\n");
printf("选择项目\n1)新增信息\n2)插入新信息\n3)删除信息\n4)显示信息\n5)查询信息\n6)退出\n");
}
void main()
{
int selection;
LinkNote l;
CreatLink(l);
ShowInformation();
while(scanf("%d",&selection)&&selection!=6)
{
switch(selection)
{
case 1:AddInformation(l);break;
case 2:InsertInformation(l);break;
case 3:DeleteInformation(l);break;
case 4:DisplayInformation(l);break;
case 5:SearchInformation(l);break;
}
ShowInformation();
}
}
尽管国标的汉字库本身在设计时,就已经按拼音对常用字进行排序了。但是真要严格地按拼音排序,我个人认为还是需要一个汉字对应拼音的Hash链表作为排序的基础,这样才能精确地排序。你所需要的,也是这样的一个数据结构。
对名字进行排序 不知道你具体的意思是什么
下面的就只是实现了就年龄最打的
class person{
String name;
char sex;
int age;
public person(String n,char s,int a){
name=n;sex=s;age=a;
}
}
public class student extends person{
public student(String n,char s,int a){
super(n,s,a);
}
public static void main(String adfaf[]){
student s[10];
for(int i=0;i<10;i++){
s[i]=new student("stu"+i,'女'+i+18);
}
int min=0;
for(int i=1;i<10;i++){
if((s[i]sex=='女'&&s[min]age>s[i]age)||(s[min]sex=='男'&&s[i]sex=='女')){
min=i;
}
}
Systemoutprintln("年龄最大的女生是"+s[min]name+"他的年龄是"+s[min]age);
}
}
以上就是关于苹果系统如何设置联系人排序全部的内容,包括:苹果系统如何设置联系人排序、用类结构的形式编写一个程序,使其可实现输入5个学生姓名、性别和年龄,并按年龄从大到小进行排序输出。、一个c语言程序,想要实现名字随着序号重新排列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)