族谱当中的几世是怎么算的,比如我是三十二世是什么意思,怎么通过族谱知道一个家族存在了有多少年。
族谱中的“几世”通常是指家族中已经有多少代人传承了血脉。一般来说,从共同祖先开始,每一代人都可以被称作“一世”,向下推算,每一代人都可以被称作“二世”、“三世”等等。
如果你是“三十二世”,那么就代表你是家族中已经传承了三十二代的人。通过族谱,你可以追溯到共同祖先,并计算出家族已经存在了多少年。
族谱通常记录了家族中每一代人的姓名、生卒年月日、婚姻、子女等信息。通过这些信息,你可以逐步向上追溯,找到共同祖先,并计算出家族存在的时间。
需要注意的是,族谱的可靠性和准确性可能存在差异,因此在进行计算时需要谨慎。此外,由于族谱的编纂和保存可能存在历史原因和地域差异,因此不同家族的族谱可能存在差异,需要结合具体情况进行参考和验证。
文 | 鹤湖风光
古今载籍,浩如烟海。其中有一部独树一帜的鸿篇巨著,牵动了无数炎黄子孙的情怀。这部书,通古达今,谱写人生,编纂了几百上千年,依然续集长新。这部书的作者,即有古代的文人雅士,还有当代的乡彦族秀,家族精英。他们跨越了历史的距离,心怀虔诚,互相对话;笔著班美,共同传承。
这会是怎样的一部书籍呢?
这部典籍的名称,就叫家谱。
承上启下,家谱总是代代纂修。其中书写规则,就是家谱体例的一项重要内容。包括家谱中的用词规范,所涉之面非常广泛,一代代族人,敬畏有加,续谱临文,相循相守,使家谱成为一种独特的历史典籍。
比如对人物的称呼等,就有大量的专用词语。尤其对男子的嫡庶、继嗣之分和妇女的家庭地位与婚姻状况,家谱的用词有着严格规定。
如旧时家谱中书写子嗣,原配所生为嫡出,侧室所生为庶出,绝对不能混淆。再如书“嗣子”表示以本宗之子为嗣,书“抚子”者表示所立之嗣为异姓之子,书“寄子”者表示为母氏带来的异姓子而未立嗣,各有各的含义。
宗谱中的“配”是男子结婚的专用词。当族谱中配和娶并用一谱时,“配”即元配,即对方为未婚,书“配某地某姓女”。“娶”则指对方为再婚女子,也称醮妇。书“娶某地某姓某公女”。在配和娶两字并用于一宗谱时,配和娶用词含义是有区别的,一字之差,意义不一样,所以不要随便把旧谱的配改为娶。少数宗谱只写娶或者只写配,这种情况另当别论,泛指男子婚况。个别家谱中配与娶还具有其他的引申含义,比如“配”为妻子过世,“娶”则妻子在世,这种现象一般会在凡例中注明。“继配”指前任妻子已死亡,与后任妻子结婚。“改配”指与前任妻子离异后,与后任妻子结婚。“聘”指男子定亲,双方夫妻关系已经确立,但未完婚。旧社会对定亲非常重视,一旦定亲,女方即为夫家人。故有“未婚卒,葬某地”之记载。现在修谱,一般不写聘,而以结婚为准,年近五十未结婚者,可写“未娶”。
书写族中女子也有一组专用词语,已嫁书“适”,许配书“字”,未许配书“待字”,而妻氏又有“配”、“续”、“侧室”等身份高低之别。
在墓葬和生死的表述上,同样也是如此。例如子孙从祖、父葬书“祔”,妻从夫葬书“合”,弟与兄同葬书“并”或“同”。族人中普通人去世书“卒”,忤逆不孝、寇乱盗贼、**兽行者,则书“死”以示惩戒。这些带有区别尊卑和寓意褒贬的专用词语,都有它的特定对象,书写时不能错用。
也有一些书法只是单纯地对同类情况加以区别。如对迁居在外的族人,在同省的书“迁”,异省的则书“徙”,以此区分远近。
与专用词语相应的是,家谱在表达人物的地位、辈分以及某种状况,则有特定的书写形式。
比如有些宗族规定“妇人改嫁不书”,即在其丈夫名下不书其人,以暗示不能“守节”。如生有子嗣,则在其子嗣下用小字注明“某氏出”,以示“子不可无母”。这种在子嗣下小字注“某氏出”的格式,仅限于有子嗣的改嫁妇人,是一种针对“妇人改嫁不书”的变通处理方法。这些表述,形式简单明了,易于掌握,便于遵行。
此外,纂修家谱还有一个重要的书写规则,就是记录内容的顺序有一定章法。如人物的名字,一般规定“名则首书,次书行,次书字”。清代学者纪昀纂修本族家谱时划分更细,书名书字的顺序,在不同的类目中有先后之别,世系图录中皆先书名,“佚名则字,佚字则次第(排行)”,但在述之文如序、传记等中,则“皆书字,佚字则名”。
传统家谱中,各种各样的书写规则,体现了宗法制约和道德伦理规范,需要我们认真阅读凡例,才能全面理解家谱内容,了解自己的家族历史。
C++语言: 二叉树实现的简单家谱树
/
File Name: BiTreecpp
Author: Geng Lequn[glq2000@126com]
Thur July 1 2010
Discription: 建立二叉家谱树,实现输入任意两个人的名字,查找得到其关系
/
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <mathh>
using namespace std;
typedef struct _Node
{
string sex; //性别 m 男; f 女
string name; //此人的姓名
string spause; //配偶的姓名
unsigned short level; //层次 辈分最高一层为1,下一层为为2,以此类推
struct _Node l_child; //指向其第一个孩子的指针
struct _Node r_brother; //指向其某一个兄弟姐妹的指针, 即左孩子为其后代,右孩子为其兄弟姐妹
struct _Node btr; //指向其父亲或者母亲的指针
_Node():level(0),l_child(NULL),r_brother(NULL),btr(NULL){cout<<"constructor"<<endl;}
~_Node(){cout<<name<<" destructor"<<endl;}
}Node, PNode;
void CreateBiTreePreOrder(PNode &pn, PNode pback, unsigned short depth);//建立二叉家谱树,以先序方式
void VisitBiTreePreOrder(PNode root); //前序遍历此二叉树
void TellRelation(PNode root); //判断两人关系
void DestroyBiTreePostOrder(PNode root); //销毁二叉树,释放节点占用的空间
void FindPersonMiddleOrder(PNode root, string name, PNode &presult); //返回家谱中指向某人的指针,找不到返回NULL
Node root=NULL; //全局变量,二叉树的根节点
unsigned findPersonFlag = 0; //标志位,0 没找到; 1 找到,找到后就不再搜索直接返回;利用此flag可避免将整个tree遍历一遍(若该name在tree中存在的话)
int main()
{
cout<<"请按先序遍历的顺序根据提示输入家谱信息,不存在则输入\"#\""<<endl;
CreateBiTreePreOrder(root, NULL, 1);//建立二叉家谱树,以先序方式
VisitBiTreePreOrder(root); //前序遍历此二叉树
TellRelation(root); //判断两人关系
DestroyBiTreePostOrder(root); //销毁二叉树
getchar();getchar();getchar();
return 0;
}
/
function:建立二叉家谱树,以先序方式
argument:
pn: 指向二叉树节点的引用
pback: pn这个节点的btr指针的值,即指向其parent的指针
depth: 该节点的层次,分最高一层为1,下一层为为2,以此类推
/
void CreateBiTreePreOrder(PNode &pn, PNode pback, unsigned short depth)
{
string str;
cin>>str; //输入该人信息,格式是 sex-name-spausename,如不存在则输入#
if(str == "#") //如: M-tom-marry, 表示此人叫tom, 男性, 配偶名字marry
{
pn = NULL;
return;
}
//如果是自定义的struct/class,应该使用构造函数。如果是内建数据类型,
//比如int,应该memset。 当然,更好的建议是使用vector取代new出来的数组
pn = new Node;
//处理输入的字符串
vector<string> v;
for(size_t b=0, e=strfind('-'); ; e=strfind('-', b))
{
if(e == string::npos)
{
vpush_back(strsubstr(b));
break;
}
else
vpush_back(strsubstr(b, e-b));
b = e+1;
}
//初始化该节点
pn->sex = v[0];
pn->name = v[1];
pn->spause = v[2];
pn->btr = pback;
pn->level = depth;
//递归建立左右子树的节点
CreateBiTreePreOrder(pn->l_child, pn, depth+1); //注意后两个参数的值
CreateBiTreePreOrder(pn->r_brother, pback, depth); //注意后两个参数的值
}
/
function: 前序遍历此二叉树
/
void VisitBiTreePreOrder(PNode pn)
{
if(!pn)
return;
cout<<endl<<"sex:"<<pn->sex<<endl;
cout<<"name:"<<pn->name<<endl;
cout<<"spause:"<<pn->spause<<endl;
cout<<"level:"<<pn->level<<endl;
cout<<"father's name:"<<((pn->btr == NULL)"NULL":pn->btr->name)<<endl;
cout<<"======================"<<endl;
VisitBiTreePreOrder(pn->l_child);
VisitBiTreePreOrder(pn->r_brother);
}
/
function: 中序遍历找到家谱中的一个人,返回其指针,若找不到,返回NULL
isSpause 1表示是找到的节点的配偶 0表示不是所找到的节点的配偶
/
void FindPersonMiddleOrder(PNode pn, string name, PNode &presult)
{
if(!pn)
return;
FindPersonMiddleOrder(pn->l_child, name, presult);
if(findPersonFlag) return;
if(name == pn->name || name == pn->spause)
{
presult = pn;
findPersonFlag = 1; //全局标志位,0 没找到; 1 找到,找到后就不再搜索直接返回;利用此全局flag可避免将整个tree遍历一遍(若该name在tree中存在的话)
return; //下次使用前不要忘记置为0
}
FindPersonMiddleOrder(pn->r_brother, name, presult);
}
/
function: 判断两人关系,若两人中至少一人不在树中,则两人无关系
若两人在树中,先判断两人是否同层次,若同层,判断是否是亲兄弟姐妹;
若不同层,设辈分大的人为A,辈分小的人为B,判断A和B是亲的还是表的,
比如,A为男性,且比B大一倍,判断A是否为B的爸爸,或亲叔叔(舅舅),或表叔叔(舅舅)
简单起见,此处没有区分是叔叔还是舅舅
比如,A为男性,且比B大两倍,判断A是否为B的亲爷爷(姥爷),或亲爷爷(姥爷)的亲兄弟
,或亲爷爷(姥爷)的表兄弟
简单起见,此处没有区分是叔叔和舅舅等做进一步区分
简单起见,查询时只输入节点中的name,不查询spause,否则处理起来太麻烦
/
void TellRelation(PNode pn)
{
string name1, name2;
//p1指向name1, p2指向name2, pbig指向辈分大的,psmall指向辈分小的
PNode p1 = NULL, p2 = NULL, pbig = NULL, psmall = NULL;
int differ = 0; //两人辈分数的差别
string title;
Label:
cout<<endl<<"输入想查询关系的两个人的名字,不想查则将两人名字输成#:"<<endl;
while(cin>>name1 && cin>>name2)
{
if(name1=="#" && name2=="#") return;
p1 = NULL; p2 = NULL; //因为程序是循环执行的,需要将上次遗留的值清掉
findPersonFlag = 0;
FindPersonMiddleOrder(root, name1, p1);
findPersonFlag = 0;
FindPersonMiddleOrder(root, name2, p2);
if(!p1 || !p2) //若有一个为空或都为空,说明至少有一个人不在家谱中,故两人无亲缘关系
{
cout<<name1<<((!p1)" 不在":" 在")<<" 家谱树中"<<endl;
cout<<name2<<((!p2)" 不在":" 在")<<" 家谱树中"<<endl;
cout<<name1<<" 和 "<<name2<<" 间没有关系"<<endl<<endl;
goto Label;
}
differ = (int)abs(p1->level - p2->level);
if(!differ) //辈分一样大
{
if(p1->sex == p2->sex)
{
if(p1->sex == "M") title = "兄弟关系";
else title = "姐妹关系";
}
else title = "兄妹(姐弟)关系";
if(p1->btr == p2->btr) //parent相同
cout<<name1<<" 和 "<<name2<<" 间是 "<<" 亲 "<<title<<endl;
else
cout<<name1<<" 和 "<<name2<<" 间是 "<<" 表 "<<title<<endl;
}
else //辈分不一样大
{
if(p1->level < p2->level) {pbig = p1; psmall = p2;}
else {pbig = p2; psmall = p1;}
switch(differ)
{
case 1:
if(psmall->btr == pbig)
title = ((pbig->sex == "M")"爸爸":"妈妈");
else
{
if(psmall->btr->btr == pbig->btr)
title = ((pbig->sex == "M")"亲叔(舅)":"亲姑(姨)");
else
title = ((pbig->sex == "M")"表叔(舅)":"表姑(姨)");
}
break;
case 2:
if(psmall->btr->btr == pbig)
title = ((pbig->sex == "M")"爷爷(姥爷)":"奶奶(姥姥)");
else
{
string tmp = ((pbig->sex == "M")"兄弟":"姐妹");
if(psmall->btr->btr->btr == pbig->btr)
title = ((psmall->btr->btr->sex == "M")"爷爷(姥爷)的亲":"奶奶(姥姥)的亲") + tmp;
else
title = ((psmall->btr->btr->sex == "M")"爷爷(姥爷)的表":"奶奶(姥姥)的表") + tmp;
}
break;
default:
string tmp2;
PNode pt = psmall;
int n = differ-2; //计算"老"字 (即grand这个字) 出现的个数
for(int i=0; i<n; ++i)
tmp2 += "老";
for(int i=0; i<differ; ++i)
pt = pt->btr;
if(pt == pbig)
title = tmp2 + ((pbig->sex == "M")"爷爷(姥爷)":"奶奶(姥姥)");
else
{
string tmp3 = ((pbig->sex == "M")"兄弟":"姐妹");
if(pt->btr == pbig->btr)
{title = tmp2 + ((pt->sex == "M")"爷爷(姥爷)的亲":"奶奶(姥姥)的亲"); title+=tmp3;}
else
{title = tmp2 + ((pt->sex == "M")"爷爷(姥爷)的表":"奶奶(姥姥)的表"); title+=tmp3;}
}
break;
}
cout<<pbig->name<<" 是 "<<psmall->name<<" 的 "<<title<<endl;
}
goto Label;
}
}
/
function: 后序遍历销毁此二叉树,释放节点占用的内存空间
/
void DestroyBiTreePostOrder(PNode pn)
{
if(!pn) return;
DestroyBiTreePostOrder(pn->l_child);
DestroyBiTreePostOrder(pn->r_brother);
delete pn;
}
通过家里的长辈和老人。
任何一个姓氏在每个不同的地方都会有自己的宗祠,这些宗祠都有着一些相通的地方,这些相通的点就连成了一条线,线的延伸也就展现了这个姓氏乃至家族的起源和发展。所以在不知道自己家谱的情况下,可以去宗祠看一下有没有自己祖辈的名字。
在很多家族的宗祠当中,都会记载这些家族的姓氏和起源,一些祖先的名字或者对宗祠有过贡献的名字都会刻制在宗祠的墙壁之上。
通过查族谱来衍生
在同一片地区的姓氏,他们的起源大多都有相同的地方。比如我姑爹姓胡,我老公也姓胡,他们一个老家在乡下,一个老家在县城,明明是生活在不同的区域,但他们的族谱中却有着共同的先人。
族谱的记载往往比宗祠上名字的记载更具体和广泛。所以通过族谱,也是可以有效查询到每个人的家谱,包括每个人所属家族中的旁支、分支、远亲、近亲都是可以系统的在族谱中查询到的。
家谱字辈的制定方式有多种,以下列举几种常见的制定方式:
1 名人主编入族谱。在宋元明清时期,家族字辈通常由名人为主编入族谱。这些名人通常是家族中的优秀学者、官员或有影响力的人物,他们为家族制定了庄重、正式、规整的字辈。这些字辈通常以祖宗的名讳为基础,以示对祖宗的敬仰和纪念。
2 家族中征集后集体议定。近代以来,家族字辈更多是由家族中征集后集体议定的。这种方式更加注重家族成员的参与和共识,使字辈更加灵活、多样、个性。
3 四言诗、五言诗、七言诗或对联形式。一些家族在确定字辈时,采用了四言诗、五言诗、七言诗或对联等形式,以增加字辈的美感和可传唤性。例如,江苏无锡胡氏家族、湖南衡阳李氏家族、湖北武汉王氏家族等,都有采用这种形式来制定字辈。
总的来说,家谱字辈的制定方式体现了家族对祖先的敬仰和纪念、对后代的期望和祝愿,同时也受到社会变迁和时代特点的影响。不同的家族传统和规定也会影响字辈的确定。
家谱的行辈字派是家谱中尤其重要的内容,一般由家庭中的某一位名人制订,编成几句吉祥话,有的文人甚至将其写成诗。
比如浙江《唐氏宗谱》的行辈字派是“福禄永昌隆,和良端世美,才智瑞宁聪”;湖北《汪氏宗谱》的行辈字派是“正大光明,成先于后,世泽延长,齐家有猷”。
中国的字辈,一般都是论中间的字为准(三个字为例),俗称派,是记载族人的排行字语。字辈命名起源于唐、宋,创于明,鼎盛于清,家族的排行,都是有一定的寓意。
一般的家族都要在撰修家谱来确定辈分的划定,达到“辨尊卑、序长幼”的目的。辈分的划分更是家族地位的主要标志,可明白长幼尊卑的伦常之分,符合伦常秩序的宗族组织原则。
大宋赵氏赵氏和大明朱家姓氏的字辈
1、大宋赵氏家族的字辈
字辈命名起源于唐、宋。宋太祖赵匡胤,为后代定的字辈连同自己的匡字一共十四个字,构成一幅对联“匡德惟从世令子,伯师希与孟由宜”。这是人们见到的最早的正式的字辈。
2、大明朱家的字辈
明太祖朱元璋的做法则复杂得多,他规定姓名格式为,姓+字辈+名,还规定取名用字必须用“五行偏旁者”,即以金、木、水、火、土为偏旁的字,而且要以火、土、金、水、木为顺序,即以五行循环相生为顺序。
族谱当中的几世是怎么算的,比如我是三十二世是什么意思,怎么通过族谱知道一个家族存在了有多少年。
本文2023-11-02 11:41:12发表“资讯”栏目。
本文链接:https://www.lezaizhuan.com/article/394269.html