@@ -0,0 +1,376 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define filename "data.txt"

struct User{
int id,exist;
char name[100];
int sex;
char phone[12];
char email[100];
char address[100];
};

struct List{
int list[10000];
int cur;
};

struct Lib{
struct User users[10000];
int cursor;
};

struct Lib *init_lib(){
struct Lib *lib=(struct Lib*)calloc(1,sizeof(struct Lib));
for(int i=0;i<10000;i++){
lib->users[i].id=i;
lib->users[i].exist=0;
}
return lib;
}

int init_user(struct Lib *lib){
for(int i=0;i<10000;i++){
if(lib->users[i].exist=0){
lib->cursor=i;
lib->users[i].id=i;
lib->users[i].exist=1;
break;
}
}
return lib->cursor;
}

void print_user(struct Lib *lib){
struct User user=lib->users[lib->cursor];
if(user.exist==0){
printf("User does not exist!\n");
}else{
printf("------------------------------------------------\n");
printf("ID:%d\n\tName:%s\n\tSex:%s\n\tPhone numser:%s\n\te-mail:%s\n\tAddress:%s\n\t",user.id,user.name,user.sex==1?"boy":"girl",user.phone,user.email,user.address);
printf("------------------------------------------------\n");
}
}

void print_by_list(struct Lib *lib,struct List *list){
for(int i=0;i<list->cur;i++){
lib->cursor=list->list[i];
print_user(lib);
printf("\n\n");
}
}

void print_all(struct Lib *lib){
for(int i=0;i<10000;i++){
if(lib->users[i].exist==0){continue;}
lib->cursor=i;
print_user(lib);
}
}

void user_add_name(struct Lib *lib,char *name){
int len=strlen(name);
int i=0;
for(i=0;i<len;i++){
lib->users[lib->cursor].name[i]=name[i];
} lib->users[lib->cursor].name[i]='\0';
}

void user_add_sex(struct Lib *lib,int sex){
lib->users[lib->cursor].sex=sex;
}

void user_add_phone(struct Lib *lib,char *phone){
for(int i=0;i<12;i++){
lib->users[lib->cursor].phone[i]=phone[i];
}
}

void user_add_email(struct Lib *lib,char *email){
int len=strlen(email);
for(int i=0;i<len+1;i++){
lib->users[lib->cursor].email[i]=email[i];
}
}

void user_add_address(struct Lib *lib,char *address){
int len=strlen(address);
for(int i=0;i<len+1;i++){
lib->users[lib->cursor].address[i]=address[i];
}
}

void add_user(struct Lib *lib){
init_user(lib);
while(1){
printf("Please input your name....\n");
char name[100];
scanf("%s",name);
user_add_name(lib,name);
printf("Are you a boy or a gril?(boy:1,gril:0)\n");
int sex;
scanf("%d",&sex);
user_add_sex(lib,sex);
printf("What is your phone number?\n");
char phone[100];
while(1){
scanf("%s",phone);
if(strlen(phone)==11){
break;
}else{
printf("Wrong formate!\ntell me again!\n");
}
}
user_add_phone(lib,phone);
printf("What is your email?\n");
char email[100];
scanf("%s",email);
user_add_email(lib,email);
printf("What is your address?\n");
char address[100];
scanf("%s",address);
user_add_address(lib,address);
printf("So,is your imformation Right?(yes:1,no:0)\n");
print_user(lib);
int yon;
scanf("%d",&yon);
if(yon==1){break;}
}
}

struct List *search_name(struct Lib *lib,char *name){
struct List *list=(struct List*)calloc(1,sizeof(struct List));
list->cur=0;
int len=strlen(name);
for(int i=0;i<10000;i++){
int tig=1;
for(int digit=0;digit<len&&tig==1;digit++){
if(lib->users[i].name[digit]!=name[digit]&&lib->users[i].exist==1){
tig=0;
}
}
if(tig==1){
list->list[list->cur]=i;
list->cur+=1;
}
}
return list;
}

struct List *search_sex(struct Lib *lib,int sex){
struct List *list=(struct List*)calloc(1,sizeof(struct List));
list->cur=0;
for(int i=0;i<10000;i++){
if(lib->users[i].sex==sex&&lib->users[i].exist==1){
list->list[list->cur]=i;
list->cur+=1;
}
}
return list;
}

struct List *search_phone(struct Lib *lib,char *phone){
struct List *list=(struct List*)calloc(1,sizeof(struct List));
list->cur=0;
for(int i=0;i<10000;i++){
int tig=1;
for(int digit=0;digit<11&&tig==1;digit++){
if(lib->users[i].phone[digit]!=phone[digit]&&lib->users[i].exist==1){
tig=0;
}
}
if(tig==1){
list->list[list->cur]=i;
list->cur+=1;
}
}
return list;
}

struct List *search_email(struct Lib *lib,char *email){
struct List *list=(struct List*)calloc(1,sizeof(struct List));
list->cur=0;
int len=strlen(email);
for(int i=0;i<10000;i++){
int tig=1;
for(int digit=0;digit<len&&tig==1;digit++){
if(lib->users[i].email[digit]!=email[digit]&&lib->users[i].exist==1){
tig=0;
}
}
if(tig==1){
list->list[list->cur]=i;
list->cur+=1;
}
}
return list;
}

struct List *search_address(struct Lib *lib,char *address){
struct List *list=(struct List*)calloc(1,sizeof(struct List));
list->cur=0;
int len=strlen(address);
for(int i=0;i<10000;i++){
int tig=1;
for(int digit=0;digit<len&&tig==1;digit++){
if(lib->users[i].address[digit]!=address[digit]&&lib->users[i].exist==1){
tig=0;
}
}
if(tig==1){
list->list[list->cur]=i;
list->cur+=1;
}
}
return list;
}

void delete_user(struct Lib *lib){
lib->users[lib->cursor].exist=0;
}

void delete_by_list(struct Lib *lib,struct List *list){
for(int i=0;i<list->cur;i++){
lib->cursor=list->list[i];
delete_user(lib);
}
}

void lib_load(struct Lib *lib){
FILE *file;
char line[200];
while(1){
if((file=fopen(filename,"r"))==NULL){
printf("Wrong File Name!\n");
}else{
while(fscanf(file,"%s",line)!=EOF){
if(line[0]=='0'){
int id=(line[1]-48)*1000+(line[2]-48)*100+(line[3]-48)*10+(line[4]-48);
lib->cursor=id;
int sex=line[5]-'0';
char phone[12]={0};
for(int i=0;i<11;i++){
phone[i]=line[6+i];
}
user_add_phone(lib,phone);
}else if(line[0]=='1'){
char name[100]={0};
for(int i=0;line[i]!='\0';i++){
name[i]=line[i+1];
}
user_add_name(lib,name);
}else if(line[0]=='2'){
char email[100]={0};
for(int i=0;line[i]!='\0';i++){
email[i]=line[i+1];
}
user_add_email(lib,email);
}else if(line[0]=='3'){
char address[100]={0};
for(int i=0;line[i]!='\0';i++){
address[i]=line[i+1];
}
user_add_email(lib,address);
}
}
break;
}
}
}

void lib_save(struct Lib *lib){
FILE *file;
while(1){
if((file=fopen(filename,"w"))!=NULL){break;}
else{printf("Fail to open.\n");}
}
for(int i=0;i<10000;i++){
if(lib->users[i].exist==1){
fputc('0',file);
fputc('0'+(i%10000)/1000,file);
fputc('0'+(i%1000)/100,file);
fputc('0'+(i%100)/10,file);
fputc('0'+i%10,file);
for(int dig=0;dig<11;dig++){
fputc(lib->users[i].phone[dig],file);
} fputc(0,file);fputc(10,file);
fputc(49,file);
for(int dig=0;dig<strlen(lib->users[i].name)+1;dig++){
fputc(lib->users[i].name[dig],file);
} fputc(10,file);
for(int dig=0;dig<strlen(lib->users[i].email)+1;dig++){
fputc(lib->users[i].email[dig],file);
} fputc(10,file);
for(int dig=0;dig<strlen(lib->users[i].address)+1;dig++){
fputc(lib->users[i].address[dig],file);
} fputc(10,file);
fputc(35,file);fputc(10,file);
}
}
}

void display1(){
char cmd[200];
int d;
struct Lib *lib=init_lib();
while(1){
printf("Please input your command:\n");
scanf("%s",cmd);
if(cmd[0]=='1'){//输出所有内容
print_all(lib);
}else if(cmd[0]=='2'){
printf("help!help!help!\n");
}else if(cmd[0]=='3'){
lib_save(lib);
}else if(cmd[0]=='4'){
lib_load(lib);
}else if(cmd[0]=='.'){
if(cmd[1]='c'){
char name[100];
printf("name!\n");
scanf("%s",name);
user_add_name(lib,name);
}else if(cmd[1]=='s'){
lib_save(lib);
}else if(cmd[1]=='d'){
printf("tell me which you want to delete?\n");
scanf("%d",&d);
lib->users[d];
}else if(cmd[1]=='r'){
lib_load(lib);
}else if(cmd[1]=='p'){
print_all(lib);
}else if(cmd[1]=='q'){
if(cmd[2]=='1'){
}else if(cmd[2]=='2'){
}else if(cmd[2]=='3'){
}
}
}
}
}


int main(){
display1();
return 0;
}

















Empty file.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,133 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define isTest 0
struct para_cal{
char *con;
int cen[128],words[26];
int len;
};

struct para_cal *init_para(char *parag){
struct para_cal *para=(struct para_cal*)calloc(1,sizeof(struct para_cal));
para->len=strlen(parag);
para->con=(char*)calloc(para->len,sizeof(char));
for(int i=0;i<para->len;i++){
para->con[i]=parag[i];
}
return para;
}

int char_cen(struct para_cal *para){
para->len=strlen(para->con);
for(int i=0;i<128;i++){para->cen[i]=0;}
for(int digit=0;digit<para->len;digit++){
if(para->con[digit]>127||para->con[digit]<0){
printf("please input right words,be sure they are Ascii!\n");
return 1;
}
para->cen[para->con[digit]]++;
}
for(int i=0;i<26;i++){
para->words[i]=para->cen[64+i]+para->cen[97+i];
}
return 0;
}

void print_words_cen(struct para_cal *para){
char *out=(char*)calloc(para->len+1,sizeof(char));
for(int i=0;i<26;i++){
printf("%c %d \n",i+65,para->words[i]);
}
}

void print_word(char *p,int len){
char *i=(char*)calloc(len+1,sizeof(char));
for(int m=0;m<len;m++){
i[m]=p[m];
} i[len]='\0';
printf("%d\t%s\n",len,i);
}

char *search_replace(char *para,char *sea,char *tar){
int len1=strlen(para);
int len2=strlen(sea);
int len3=strlen(tar);
if(isTest){printf("%d %d %d \n",len1,len2,len3);}
char *one,*two,*the,*sto,*res;
sto=(char*)calloc(len1,sizeof(char));
for(int i=0;i<len1;i++){
sto[i]=para[i];
} if(isTest==1){print_word(sto,len1);}
for(int digit=0;digit<len1-len2+1;++digit){
int dig=0;
for(dig=0;dig<len2;dig++){
if(sto[digit+dig]!=sea[dig]){break;}
} if(dig==len2){

one=(char*)calloc(digit,sizeof(char));
for(dig=0;dig<digit;dig++){
one[dig]=sto[dig];
} if(isTest==1){print_word(one,digit);}

two=(char*)calloc(len3,sizeof(char));
for(dig=0;dig<len3;dig++){
two[dig]=tar[dig];
} if(isTest==1){print_word(two,len3);}

the=(char*)calloc(len1-digit-len2,sizeof(char));
for(dig=0;dig<len1-digit-len2;dig++){
the[dig]=sto[digit+len2+dig];
} if(isTest==1){print_word(the,len1-digit-len2);}

res=(char*)calloc(len1+len3-len2+1,sizeof(char));
for(int i=0;i<len1+len3-len2+1;i++){
if(i<digit){
res[i]=sto[i];
}else if(i<digit+len3){
res[i]=tar[i-digit];
}else {
res[i]=the[i-len3-digit];
}
} res[len1+len3-len2]='\0';
if(isTest){printf("%s\n",res);}
}
}
return res;
}

void file_save(char *artical,char *name){
FILE *file=fopen(name,"w");
for(int i=0;artical[i]!='\0';i++){
fputc(artical[i],file);
}
fclose(file);
}

void display1(){
char artical[100]="hello world!";
struct para_cal *pro=init_para(artical);
char_cen(pro);
printf("word:%s\n",artical);
print_words_cen(pro);
}

void display2(){
char artical[100]="111111222111";
char tore[100]="333";
char bere[100]="222";
printf("the sentence before:\n\"%s\"\n",artical);
printf("Want the \"%s\" to be replaced as \"%s\"\n",bere,tore);
char *res=search_replace(artical,bere,tore);
printf("%s\n",res);
char name[10]="date.txt";
printf("save file as %s\n",name);
file_save(artical,name);
}
int main(){
printf("display1:\n");
display1();
printf("display2:\n");
display2();
return 0;
}
@@ -0,0 +1 @@
111111222111
@@ -0,0 +1,315 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Len 1000
#define isTest 1


typedef struct {
int *con,len,sig; //sig=1 -> 正数 sig=0 -> 负数
}Num;

typedef struct {
Num *nums;
int *sig; //[0]代表运算种类,[1]代表较大数位置
Num *res;
}Pro;

int power(int a,int x){
int res=1;
for(int i=0;i<x;i++){
res*=a;
}
return res;
}

int bigger(Num *num1,Num *num2){
if(num1->sig>0&&num2->sig<0){return 1;}
else if(num1->sig<0&&num2->sig>0){return 2;}
else{
int tig=num1->sig;
for(int digit=Len-1;digit>=0;digit--){
if(num1->con[digit]>num2->con[digit]){
return tig?1:2;
}else if(num1->con[digit]<num2->con[digit]){
return tig?2:1;
}else if(digit==0){ return 0; }
}
}
}


//比较两个num绝对值的大小。
int num_abs_compare(Num *num1,Num *num2){
for(int digit=Len-1;digit>=0;digit--){
if(num1->con[digit]>num2->con[digit]){
return 1;
}else if(num2->con[digit]<num2->con[digit]){
return 2;
}else if(digit==0){
return 0;
}
}
}

//比较两个num真实值的大小。
int num_compare(Num *num1,Num *num2){
if(num1->sig>0&&num2->sig<0){
return 1;
}else if(num1->sig<0&&num2->sig>0){
return 2;
}else if(num1->sig>0&&num2->sig>0){
return num_abs_compare(num1,num2);
}else if(num1->sig<0&&num2->sig<0){
return num_abs_compare(num2,num1);
}
}

//比较num和0的大小。
int num_comto_zero(Num *num){
for(int digit=0;digit<Len;digit++){
if(num->con[digit]==0){
break;
}else if(digit==Len-1){
return 0;
}
}
if(num->sig){
return 1;
}else{
return -1;
}
}

//将字符串转为Num对象。
Num *str_to_Num(char *str){
Num *num=(Num*)calloc(1,sizeof(Num)); //分配num空间,初始化对象
num->con=(int*)calloc(Len,sizeof(int)); //分配num.con的空间
num->len=strlen(str); //获取字符串的长度
if(str[0]=='-'){ //获取num应有正负值,并对长度做修正。
num->sig=0;
num->len-=1;
}else{
num->sig=1;
}
for(int digit=0;digit<Len;digit++){ //将字符串主体写入num.con中
if(digit<num->len){
num->con[digit]=str[num->len-num->sig-digit]-'0';
}else {
num->con[digit]=0;
}
}
if(num_comto_zero(num)!=-1){num->sig=1;}
return num;
}

//将Num对象转为字符串。
char *Num_to_str(Num *tar){
char *res=(char*)calloc(Len,sizeof(char)); //分配字符串空间,初始化对象
int digit=0; //初始化数位
if(tar->sig==0){ //判断并执行写入符号位
res[digit++]='-';
}
for(int dig1=tar->len-1;dig1>=0;dig1--){ //将num.con写入字符串中
res[digit++]=tar->con[dig1]+'0';
}
return res;
}

//将int对象转化为Num对象。
Num *int_to_Num(int tar){
int digit=0;
Num *num=(Num*)calloc(1,sizeof(Num));
num->con=(int*)calloc(Len,sizeof(Num));
if(tar<0){num->sig=0;}
else{num->sig=1;}
for(digit=0;tar>0;digit++){
num->con[digit]=tar%10;
tar/=10;
}
num->len=digit;
return num;
}

//将Num对象转化为int对象(可能会爆表)。
int Num_to_int(Num *num){
int tar=0;
for(int digit=0;digit<Len;digit++){
tar+=num->con[digit]*power(10,digit);
}
tar*=num->sig=1?1:-1;
return tar;
}

//初始化pro对象
Pro *pro_creat(int sig){
Pro *pro=(Pro*)calloc(1,sizeof(Pro)); //分配pro空间
pro->sig=(int*)calloc(2,sizeof(int)); //分配并写入运算类型
pro->sig[0]=sig;
pro->nums=(Num*)calloc(2,sizeof(Num)); //分配运算对象空间
pro->nums[0].con=(int*)calloc(Len,sizeof(int));
pro->nums[1].con=(int*)calloc(Len,sizeof(int));
pro->res=(Num*)calloc(sig!=3?1:2,sizeof(Num)); //分配运算结果的空间
pro->res[0].con=(int*)calloc(Len,sizeof(int));
if(sig==3){pro->res[1].con=(int*)calloc(Len,sizeof(int));} //如果是除法,给余数分配空间
return pro;
}

//将num对象写入pro中。
void Num_to_pro(Pro *pro,Num *num,int dig){
pro->nums[dig]=*num;
}

//pro的正式运算
void pro_start(Pro *pro){
int bi,sm;
pro->sig[1]=num_abs_compare(pro->nums,pro->nums+1);
if(pro->sig[0]<2){
if(pro->sig[0]!=(pro->nums[0].sig*pro->nums[1].sig)){
//ba_add(pro->nums[0],pro->nums[1]);
//printf("开始加法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1));
// pro->res=str_to_Num("3999");
int tig=0;
for(int digit=0;digit<Len;digit++){
pro->res->con[digit]=pro->nums[0].con[digit]+pro->nums[1].con[digit]+tig;
//printf("%d",pro->res->con[digit]);
if(pro->res->con[digit]>9){
pro->res->con[digit]-=10;
tig=1;
}else{tig=0;}
}
if(tig==1){printf("数据过大溢出,请调整Len值后重新编译运行!\n");}
pro->res->sig=pro->nums->sig;
pro->res->len=(pro->sig[1]==1)?pro->nums[0].len:pro->nums[1].len;
}else{
//ba_dec(pro->nums[0],pro->nums[1]);
//printf("开始减法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1));
if(pro->sig[1]==0){
pro->res=str_to_Num("0");
}else{
if(pro->sig[1]==1){
bi=0,sm=1;
pro->res->sig=pro->nums->sig;
}else if(pro->sig[1]==2){
bi=1,sm=0;
pro->res->sig=pro->nums->sig==1?0:1;
}
for(int digit=0,tig=0;digit<Len;digit++){
pro->res->con[digit]=pro->nums[bi].con[digit]-pro->nums[sm].con[digit]-tig;
if(pro->res->con[digit]<0){
pro->res->con[digit]+=10;
tig=1;
}else{
tig=0;
}
}
int len=0;
for(len=Len;pro->res->con[len-1]==0;len--){}
pro->res->len=len;
}
}
}else if (pro->sig[0]==2){
printf("开始乘法");
if(pro->nums[0].sig==pro->nums[1].sig){
pro->res->sig=1;
}else{pro->res->sig=0;}
for(int a=0;a<Len;a++){
pro->res->con[a]=0;
}
for(int a=0;a<Len;a++){
for(int b=0;b<Len;b++){
int mid=0;int tig=a+b;
pro->res->con[tig]+=pro->nums[0].con[a]*pro->nums[1].con[b];
while(pro->res->con[tig]>9){
mid=pro->res->con[tig]/10;
pro->res->con[tig]%=10;
pro->res->con[++tig]+=mid;
}
}
}
int len=0;
for(len=Len;pro->res->con[len-1]==0;len--){}
pro->res->len=len;
}else if (pro->sig[0]==3){
printf("开始除法");
Num *b1,*b2;
int mid,n;
b1=str_to_Num(Num_to_str(pro->nums[0]));
b2=str_to_Num("0");
for(int digit=pro->num[0].len-pro->num[1].len;digit>=0;digit--){
for(int dig=digit;digit<b1->len;digit--){
b2->con[dig]=b1->con[dig];
b1->con[dig]=0;
}
for(len=Len;b1[len-1]==0;len--){}
b1->len=len;
for(len=Len;b2[len-1]==0;len--){}
b2->len=len;
for(pro->res[0].con[dig]=0;num_compare(b2,pro->nums[1])==1;pro->res[0].con[dig]++){
Pro cal=pro_creat(1);
Num_to_pro(cal,b2,0);
Num_to_pro(cal,pro->nums+1,1);
pro_start(cal);
}
for(int dig=digit;digit<b1->len;digit--){

}
}
}

void test6(){

}

void test5(){
// for(int a=0;a<1000;a++){
// for(int b=0;b<1000;b++){
int a=11;int b=1100;
Pro *pro=pro_creat(2);
Num_to_pro(pro,int_to_Num(a),0);
Num_to_pro(pro,int_to_Num(b),1);
pro_start(pro);
printf("%d * %d = %s\n",a,b,Num_to_str(pro->res));
// }}
}

void test4(){
printf("1000 is %s\n",Num_to_str(int_to_Num(1000)));
printf("1000 is %d\n",Num_to_int(str_to_Num("1000")));
}

void test3(){
char *one="1000";
char *two="1";
Pro *pro=pro_creat(1);
Num_to_pro(pro,str_to_Num(one),0);
Num_to_pro(pro,str_to_Num(two),1);
pro_start(pro);
printf("%s\n",Num_to_str(pro->res));
}

void test2(){
char *num_char="-1000000000000031415926";
Num *num=str_to_Num(num_char);
printf("%s\n",Num_to_str(num));

}



void test1(){
int length=100;
Num *num=(Num*)calloc(1,sizeof(Num));
num->sig=1;
num->con=(int*)calloc(Len,sizeof(int));
for(int digit=0;digit<length;digit++){
num->con[digit]=9;
} num->len=length;
printf("%s\n",Num_to_str(num));
}

int main(){
test5();
return 0;
}
@@ -0,0 +1 @@
,yuyang,yuyang-desktop,05.05.2018 12:09,file:///home/yuyang/.config/libreoffice/4;
@@ -0,0 +1,52 @@
#include<stdio.h>
struct Data{
int day;
int month;
};
struct Context{
int weekdata;
struct Data data;
int add;
};

int main(){
int months[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int lock=1;
struct Context con;
con.data.day=1;
con.data.month=1;
con.weekdata=6;
con.add=0;
while(con.data.month<13){
if(con.add==0&&con.data.day==1){
printf("*********************************\nThis is the month %d\n\n",con.data.month);
lock=1;
}
//输出数据
if(con.add==con.weekdata&&lock){
if(con.data.day<10){printf(" ");}
printf("%d\t",con.data.day++);
con.weekdata=(con.weekdata<6)?con.weekdata+1:0;
}else {
printf(" \t");
} con.add++;

//尝试更新月份
if(con.data.day==months[con.data.month]+1){
con.data.month++;
con.data.day=1;
lock=0;
}

//尝试换行
if(con.add==7){
printf("\n");
con.add=0;
}
}
printf("日历打印完毕!\n");
while(1);
return 0;
}


Binary file not shown.
@@ -0,0 +1,138 @@
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define Len 1000 //定义此运算体系中支持的最大长度

//此运算体系中用于存储数字的对象。
struct Num{
int con[Len];
int sig; //代表此数字的正负号。0为负,1为正
int len;
};

//此运算体系中一次外显的运算过程。
struct Pro{
struct Num nums[2];
int sig[2]; //0位代表运算类型,0-加 1-减 2-乘 3-除
//1位代表较大的数字的下标
struct Num result;
};

//此运算体系中输入一个长数
//输入:以字符串形式存储的一个数字 ,负号加在最前面。
void NumIn(char *s_num,struct *Num result){
struct Num *res=(struct Num *)calloc(1,sizeof(struct Num));
for(int digit=0;digit<Len;digit++){
res->con[digit]=0;
}
res->sig=s_num[0]=='-'?1:0;
res->len=strlen(s_num)-res->sig;
for(int digit=0;digit+res->sig<res->len;digit++){
res->con[digit]=s_num[res->len-digit-1];
}
res->sig=!res->sig;
*result=*res;
}

//内在的两同号数相加运算
void ba_add(struct Num *num,struct Num *res){
for(digit=0;digit<Len;digit++){
res->con[digit]=0;
}
int tig=0; //这个变量用于记录进位与否。
int dig=0; //这个代表正在运算的位数。
for(digit=0;digit<Len;digit++){
res.con[digit]=num[0].con[digit]+num[1].con[digit]+tig;
if(res.con[digit]>9){
tig=1;
res.con[digit]-=10;
}else{
tig=0;
}
}
res.sig=num[0].sig;
}

//内在的两同号数大减小运算
void ba_dec(struct Num *num,struct Num *res){ //保证【0】一定大于【1】
for(digit=0;digit<Len;digit++){
res->con[digit]=0;
}
int tig=0; //用于记录拆借的数。
int dig=0; //同上。
for(digit=0;digit<Len;digit++){
res->con[digit]=num[0].con[digit]-num[1].con[digit]-tig;
if(res->con[digit]<0){
res->con[digit]+=10;
tig=1;
}else{
tig=0;
}
}
res.sig=num[0].sig;
}

//乘法
void ba_mul(struct Num *num,struct Num *res){
for(digit=0;digit<Len;digit++){
res->con[digit]=0;
}
int n=0,n1=0,n2=0;
for(co1=0;co1<num[0].len;co1++){
for(co2=0;co2<num[1].len;co2++){
n=num[0].con[co1]*num[1].con[co2];
n1=n/10,n2=n%10; //n1代表高位,n2代表低位
res.con[co1+co2]+=n2;
res.con[co1+co2+1]+=n1;
}
}
res.sig=num[0].sig==num[1].sig;
}

//除法
void ba_div(struct Num *num,struct Num *res){
// for(digit=0;digit<Len;digit++){
// res->con[digit]=0;
// }
// int bnum[Len]=0;
// for(digit=num[0].len-num[1].len;digit>=0;digit--){
// for(int dig=digit;digit<num[0].len;digit++){
//
// }
// for(res->con[digit]=0;)
// }
}

//定义了一次外显的运算, pro 外显运算的储存位置
// num1,num2 参与运算的两个数字
// type 外线运算的种类 0-加 1-减 2-乘 3-除
void pro_init(struct Pro *pro,struct Num num1,struct Num num2,int type){
pro->nums[0]=num1;
pro->nums[1]=num2;
pro->sig[0]=type;
for(int digit=Len-1;digit>=0;digit--){
if(pro->nums[0].con[digit]>pro->nums[1].con[digit]){
pro->sig[1]=0;
break;
} else if(pro->nums[0].con[digit]<pro->nums[1].con[digit]){
pro->sig[1]=1;
break;
} else if(digit==0){
pro->sig[1]=-1;
}

}
switch (type) //开始运算
{
if(type<2){
if(type!=(pro->nums[0].sig==pro->nums[1].sig)){
struct Num numin[2]={pro->nums[0],pro->nums[1]};
ba_add(numin,pro->result);
}else{

}
}
}



Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,315 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Len 1000
#define isTest 1


typedef struct {
int *con,len,sig; //sig=1 -> 正数 sig=0 -> 负数
}Num;

typedef struct {
Num *nums;
int *sig; //[0]代表运算种类,[1]代表较大数位置
Num *res;
}Pro;

int power(int a,int x){
int res=1;
for(int i=0;i<x;i++){
res*=a;
}
return res;
}

int bigger(Num *num1,Num *num2){
if(num1->sig>0&&num2->sig<0){return 1;}
else if(num1->sig<0&&num2->sig>0){return 2;}
else{
int tig=num1->sig;
for(int digit=Len-1;digit>=0;digit--){
if(num1->con[digit]>num2->con[digit]){
return tig?1:2;
}else if(num1->con[digit]<num2->con[digit]){
return tig?2:1;
}else if(digit==0){ return 0; }
}
}
}


//比较两个num绝对值的大小。
int num_abs_compare(Num *num1,Num *num2){
for(int digit=Len-1;digit>=0;digit--){
if(num1->con[digit]>num2->con[digit]){
return 1;
}else if(num2->con[digit]<num2->con[digit]){
return 2;
}else if(digit==0){
return 0;
}
}
}

//比较两个num真实值的大小。
int num_compare(Num *num1,Num *num2){
if(num1->sig>0&&num2->sig<0){
return 1;
}else if(num1->sig<0&&num2->sig>0){
return 2;
}else if(num1->sig>0&&num2->sig>0){
return num_abs_compare(num1,num2);
}else if(num1->sig<0&&num2->sig<0){
return num_abs_compare(num2,num1);
}
}

//比较num和0的大小。
int num_comto_zero(Num *num){
for(int digit=0;digit<Len;digit++){
if(num->con[digit]==0){
break;
}else if(digit==Len-1){
return 0;
}
}
if(num->sig){
return 1;
}else{
return -1;
}
}

//将字符串转为Num对象。
Num *str_to_Num(char *str){
Num *num=(Num*)calloc(1,sizeof(Num)); //分配num空间,初始化对象
num->con=(int*)calloc(Len,sizeof(int)); //分配num.con的空间
num->len=strlen(str); //获取字符串的长度
if(str[0]=='-'){ //获取num应有正负值,并对长度做修正。
num->sig=0;
num->len-=1;
}else{
num->sig=1;
}
for(int digit=0;digit<Len;digit++){ //将字符串主体写入num.con中
if(digit<num->len){
num->con[digit]=str[num->len-num->sig-digit]-'0';
}else {
num->con[digit]=0;
}
}
if(num_comto_zero(num)!=-1){num->sig=1;}
return num;
}

//将Num对象转为字符串。
char *Num_to_str(Num *tar){
char *res=(char*)calloc(Len,sizeof(char)); //分配字符串空间,初始化对象
int digit=0; //初始化数位
if(tar->sig==0){ //判断并执行写入符号位
res[digit++]='-';
}
for(int dig1=tar->len-1;dig1>=0;dig1--){ //将num.con写入字符串中
res[digit++]=tar->con[dig1]+'0';
}
return res;
}

//将int对象转化为Num对象。
Num *int_to_Num(int tar){
int digit=0;
Num *num=(Num*)calloc(1,sizeof(Num));
num->con=(int*)calloc(Len,sizeof(Num));
if(tar<0){num->sig=0;}
else{num->sig=1;}
for(digit=0;tar>0;digit++){
num->con[digit]=tar%10;
tar/=10;
}
num->len=digit;
return num;
}

//将Num对象转化为int对象(可能会爆表)。
int Num_to_int(Num *num){
int tar=0;
for(int digit=0;digit<Len;digit++){
tar+=num->con[digit]*power(10,digit);
}
tar*=num->sig=1?1:-1;
return tar;
}

//初始化pro对象
Pro *pro_creat(int sig){
Pro *pro=(Pro*)calloc(1,sizeof(Pro)); //分配pro空间
pro->sig=(int*)calloc(2,sizeof(int)); //分配并写入运算类型
pro->sig[0]=sig;
pro->nums=(Num*)calloc(2,sizeof(Num)); //分配运算对象空间
pro->nums[0].con=(int*)calloc(Len,sizeof(int));
pro->nums[1].con=(int*)calloc(Len,sizeof(int));
pro->res=(Num*)calloc(sig!=3?1:2,sizeof(Num)); //分配运算结果的空间
pro->res[0].con=(int*)calloc(Len,sizeof(int));
if(sig==3){pro->res[1].con=(int*)calloc(Len,sizeof(int));} //如果是除法,给余数分配空间
return pro;
}

//将num对象写入pro中。
void Num_to_pro(Pro *pro,Num *num,int dig){
pro->nums[dig]=*num;
}

//pro的正式运算
void pro_start(Pro *pro){
int bi,sm;
pro->sig[1]=num_abs_compare(pro->nums,pro->nums+1);
if(pro->sig[0]<2){
if(pro->sig[0]!=(pro->nums[0].sig*pro->nums[1].sig)){
//ba_add(pro->nums[0],pro->nums[1]);
//printf("开始加法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1));
// pro->res=str_to_Num("3999");
int tig=0;
for(int digit=0;digit<Len;digit++){
pro->res->con[digit]=pro->nums[0].con[digit]+pro->nums[1].con[digit]+tig;
//printf("%d",pro->res->con[digit]);
if(pro->res->con[digit]>9){
pro->res->con[digit]-=10;
tig=1;
}else{tig=0;}
}
if(tig==1){printf("数据过大溢出,请调整Len值后重新编译运行!\n");}
pro->res->sig=pro->nums->sig;
pro->res->len=(pro->sig[1]==1)?pro->nums[0].len:pro->nums[1].len;
}else{
//ba_dec(pro->nums[0],pro->nums[1]);
//printf("开始减法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1));
if(pro->sig[1]==0){
pro->res=str_to_Num("0");
}else{
if(pro->sig[1]==1){
bi=0,sm=1;
pro->res->sig=pro->nums->sig;
}else if(pro->sig[1]==2){
bi=1,sm=0;
pro->res->sig=pro->nums->sig==1?0:1;
}
for(int digit=0,tig=0;digit<Len;digit++){
pro->res->con[digit]=pro->nums[bi].con[digit]-pro->nums[sm].con[digit]-tig;
if(pro->res->con[digit]<0){
pro->res->con[digit]+=10;
tig=1;
}else{
tig=0;
}
}
int len=0;
for(len=Len;pro->res->con[len-1]==0;len--){}
pro->res->len=len;
}
}
}else if (pro->sig[0]==2){
printf("开始乘法");
if(pro->nums[0].sig==pro->nums[1].sig){
pro->res->sig=1;
}else{pro->res->sig=0;}
for(int a=0;a<Len;a++){
pro->res->con[a]=0;
}
for(int a=0;a<Len;a++){
for(int b=0;b<Len;b++){
int mid=0;int tig=a+b;
pro->res->con[tig]+=pro->nums[0].con[a]*pro->nums[1].con[b];
while(pro->res->con[tig]>9){
mid=pro->res->con[tig]/10;
pro->res->con[tig]%=10;
pro->res->con[++tig]+=mid;
}
}
}
int len=0;
for(len=Len;pro->res->con[len-1]==0;len--){}
pro->res->len=len;
}else if (pro->sig[0]==3){
printf("开始除法");
Num *b1,*b2;
int mid,n;
b1=str_to_Num(Num_to_str(pro->nums[0]));
b2=str_to_Num("0");
for(int digit=pro->num[0].len-pro->num[1].len;digit>=0;digit--){
for(int dig=digit;digit<b1->len;digit--){
b2->con[dig]=b1->con[dig];
b1->con[dig]=0;
}
for(len=Len;b1[len-1]==0;len--){}
b1->len=len;
for(len=Len;b2[len-1]==0;len--){}
b2->len=len;
for(pro->res[0].con[dig]=0;num_compare(b2,pro->nums[1])==1;pro->res[0].con[dig]++){
Pro cal=pro_creat(1);
Num_to_pro(cal,b2,0);
Num_to_pro(cal,pro->nums+1,1);
pro_start(cal);
}
for(int dig=digit;digit<b1->len;digit--){

}
}
}

void test6(){

}

void test5(){
// for(int a=0;a<1000;a++){
// for(int b=0;b<1000;b++){
int a=11;int b=1100;
Pro *pro=pro_creat(2);
Num_to_pro(pro,int_to_Num(a),0);
Num_to_pro(pro,int_to_Num(b),1);
pro_start(pro);
printf("%d * %d = %s\n",a,b,Num_to_str(pro->res));
// }}
}

void test4(){
printf("1000 is %s\n",Num_to_str(int_to_Num(1000)));
printf("1000 is %d\n",Num_to_int(str_to_Num("1000")));
}

void test3(){
char *one="1000";
char *two="1";
Pro *pro=pro_creat(1);
Num_to_pro(pro,str_to_Num(one),0);
Num_to_pro(pro,str_to_Num(two),1);
pro_start(pro);
printf("%s\n",Num_to_str(pro->res));
}

void test2(){
char *num_char="-1000000000000031415926";
Num *num=str_to_Num(num_char);
printf("%s\n",Num_to_str(num));

}



void test1(){
int length=100;
Num *num=(Num*)calloc(1,sizeof(Num));
num->sig=1;
num->con=(int*)calloc(Len,sizeof(int));
for(int digit=0;digit<length;digit++){
num->con[digit]=9;
} num->len=length;
printf("%s\n",Num_to_str(num));
}

int main(){
test5();
return 0;
}
@@ -0,0 +1,13 @@
#include<stdio.h>

void ba_div(struct Num *nums,struct Num *res){
int nu1[Len],nu2[Len];
for(int digit=nums[0].len-nums[1].len;digit>=0;digit--){
for(int dig1=digit;dig1<nums[0].len;digit++){
nu1[dig1-digit]=nums[0].con[dig1];
nums[0].con[dig1]=0;
}
res[0].con[digit]=0;
while(1){

}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN +17.6 KB C_class/up/all/a.out
Binary file not shown.
@@ -0,0 +1,376 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define filename "data.txt"

struct User{
int id,exist;
char name[100];
int sex;
char phone[12];
char email[100];
char address[100];
};

struct List{
int list[10000];
int cur;
};

struct Lib{
struct User users[10000];
int cursor;
};

struct Lib *init_lib(){
struct Lib *lib=(struct Lib*)calloc(1,sizeof(struct Lib));
for(int i=0;i<10000;i++){
lib->users[i].id=i;
lib->users[i].exist=0;
}
return lib;
}

int init_user(struct Lib *lib){
for(int i=0;i<10000;i++){
if(lib->users[i].exist=0){
lib->cursor=i;
lib->users[i].id=i;
lib->users[i].exist=1;
break;
}
}
return lib->cursor;
}

void print_user(struct Lib *lib){
struct User user=lib->users[lib->cursor];
if(user.exist==0){
printf("User does not exist!\n");
}else{
printf("------------------------------------------------\n");
printf("ID:%d\n\tName:%s\n\tSex:%s\n\tPhone numser:%s\n\te-mail:%s\n\tAddress:%s\n\t",user.id,user.name,user.sex==1?"boy":"girl",user.phone,user.email,user.address);
printf("------------------------------------------------\n");
}
}

void print_by_list(struct Lib *lib,struct List *list){
for(int i=0;i<list->cur;i++){
lib->cursor=list->list[i];
print_user(lib);
printf("\n\n");
}
}

void print_all(struct Lib *lib){
for(int i=0;i<10000;i++){
if(lib->users[i].exist==0){continue;}
lib->cursor=i;
print_user(lib);
}
}

void user_add_name(struct Lib *lib,char *name){
int len=strlen(name);
int i=0;
for(i=0;i<len;i++){
lib->users[lib->cursor].name[i]=name[i];
} lib->users[lib->cursor].name[i]='\0';
}

void user_add_sex(struct Lib *lib,int sex){
lib->users[lib->cursor].sex=sex;
}

void user_add_phone(struct Lib *lib,char *phone){
for(int i=0;i<12;i++){
lib->users[lib->cursor].phone[i]=phone[i];
}
}

void user_add_email(struct Lib *lib,char *email){
int len=strlen(email);
for(int i=0;i<len+1;i++){
lib->users[lib->cursor].email[i]=email[i];
}
}

void user_add_address(struct Lib *lib,char *address){
int len=strlen(address);
for(int i=0;i<len+1;i++){
lib->users[lib->cursor].address[i]=address[i];
}
}

void add_user(struct Lib *lib){
init_user(lib);
while(1){
printf("Please input your name....\n");
char name[100];
scanf("%s",name);
user_add_name(lib,name);
printf("Are you a boy or a gril?(boy:1,gril:0)\n");
int sex;
scanf("%d",&sex);
user_add_sex(lib,sex);
printf("What is your phone number?\n");
char phone[100];
while(1){
scanf("%s",phone);
if(strlen(phone)==11){
break;
}else{
printf("Wrong formate!\ntell me again!\n");
}
}
user_add_phone(lib,phone);
printf("What is your email?\n");
char email[100];
scanf("%s",email);
user_add_email(lib,email);
printf("What is your address?\n");
char address[100];
scanf("%s",address);
user_add_address(lib,address);
printf("So,is your imformation Right?(yes:1,no:0)\n");
print_user(lib);
int yon;
scanf("%d",&yon);
if(yon==1){break;}
}
}

struct List *search_name(struct Lib *lib,char *name){
struct List *list=(struct List*)calloc(1,sizeof(struct List));
list->cur=0;
int len=strlen(name);
for(int i=0;i<10000;i++){
int tig=1;
for(int digit=0;digit<len&&tig==1;digit++){
if(lib->users[i].name[digit]!=name[digit]&&lib->users[i].exist==1){
tig=0;
}
}
if(tig==1){
list->list[list->cur]=i;
list->cur+=1;
}
}
return list;
}

struct List *search_sex(struct Lib *lib,int sex){
struct List *list=(struct List*)calloc(1,sizeof(struct List));
list->cur=0;
for(int i=0;i<10000;i++){
if(lib->users[i].sex==sex&&lib->users[i].exist==1){
list->list[list->cur]=i;
list->cur+=1;
}
}
return list;
}

struct List *search_phone(struct Lib *lib,char *phone){
struct List *list=(struct List*)calloc(1,sizeof(struct List));
list->cur=0;
for(int i=0;i<10000;i++){
int tig=1;
for(int digit=0;digit<11&&tig==1;digit++){
if(lib->users[i].phone[digit]!=phone[digit]&&lib->users[i].exist==1){
tig=0;
}
}
if(tig==1){
list->list[list->cur]=i;
list->cur+=1;
}
}
return list;
}

struct List *search_email(struct Lib *lib,char *email){
struct List *list=(struct List*)calloc(1,sizeof(struct List));
list->cur=0;
int len=strlen(email);
for(int i=0;i<10000;i++){
int tig=1;
for(int digit=0;digit<len&&tig==1;digit++){
if(lib->users[i].email[digit]!=email[digit]&&lib->users[i].exist==1){
tig=0;
}
}
if(tig==1){
list->list[list->cur]=i;
list->cur+=1;
}
}
return list;
}

struct List *search_address(struct Lib *lib,char *address){
struct List *list=(struct List*)calloc(1,sizeof(struct List));
list->cur=0;
int len=strlen(address);
for(int i=0;i<10000;i++){
int tig=1;
for(int digit=0;digit<len&&tig==1;digit++){
if(lib->users[i].address[digit]!=address[digit]&&lib->users[i].exist==1){
tig=0;
}
}
if(tig==1){
list->list[list->cur]=i;
list->cur+=1;
}
}
return list;
}

void delete_user(struct Lib *lib){
lib->users[lib->cursor].exist=0;
}

void delete_by_list(struct Lib *lib,struct List *list){
for(int i=0;i<list->cur;i++){
lib->cursor=list->list[i];
delete_user(lib);
}
}

void lib_load(struct Lib *lib){
FILE *file;
char line[200];
while(1){
if((file=fopen(filename,"r"))==NULL){
printf("Wrong File Name!\n");
}else{
while(fscanf(file,"%s",line)!=EOF){
if(line[0]=='0'){
int id=(line[1]-48)*1000+(line[2]-48)*100+(line[3]-48)*10+(line[4]-48);
lib->cursor=id;
int sex=line[5]-'0';
char phone[12]={0};
for(int i=0;i<11;i++){
phone[i]=line[6+i];
}
user_add_phone(lib,phone);
}else if(line[0]=='1'){
char name[100]={0};
for(int i=0;line[i]!='\0';i++){
name[i]=line[i+1];
}
user_add_name(lib,name);
}else if(line[0]=='2'){
char email[100]={0};
for(int i=0;line[i]!='\0';i++){
email[i]=line[i+1];
}
user_add_email(lib,email);
}else if(line[0]=='3'){
char address[100]={0};
for(int i=0;line[i]!='\0';i++){
address[i]=line[i+1];
}
user_add_email(lib,address);
}
}
break;
}
}
}

void lib_save(struct Lib *lib){
FILE *file;
while(1){
if((file=fopen(filename,"w"))!=NULL){break;}
else{printf("Fail to open.\n");}
}
for(int i=0;i<10000;i++){
if(lib->users[i].exist==1){
fputc('0',file);
fputc('0'+(i%10000)/1000,file);
fputc('0'+(i%1000)/100,file);
fputc('0'+(i%100)/10,file);
fputc('0'+i%10,file);
for(int dig=0;dig<11;dig++){
fputc(lib->users[i].phone[dig],file);
} fputc(0,file);fputc(10,file);
fputc(49,file);
for(int dig=0;dig<strlen(lib->users[i].name)+1;dig++){
fputc(lib->users[i].name[dig],file);
} fputc(10,file);
for(int dig=0;dig<strlen(lib->users[i].email)+1;dig++){
fputc(lib->users[i].email[dig],file);
} fputc(10,file);
for(int dig=0;dig<strlen(lib->users[i].address)+1;dig++){
fputc(lib->users[i].address[dig],file);
} fputc(10,file);
fputc(35,file);fputc(10,file);
}
}
}

void display1(){
char cmd[200];
int d;
struct Lib *lib=init_lib();
while(1){
printf("Please input your command:\n");
scanf("%s",cmd);
if(cmd[0]=='1'){//输出所有内容
print_all(lib);
}else if(cmd[0]=='2'){
printf("help!help!help!\n");
}else if(cmd[0]=='3'){
lib_save(lib);
}else if(cmd[0]=='4'){
lib_load(lib);
}else if(cmd[0]=='.'){
if(cmd[1]='c'){
char name[100];
printf("name!\n");
scanf("%s",name);
user_add_name(lib,name);
}else if(cmd[1]=='s'){
lib_save(lib);
}else if(cmd[1]=='d'){
printf("tell me which you want to delete?\n");
scanf("%d",&d);
lib->users[d];
}else if(cmd[1]=='r'){
lib_load(lib);
}else if(cmd[1]=='p'){
print_all(lib);
}else if(cmd[1]=='q'){
if(cmd[2]=='1'){
}else if(cmd[2]=='2'){
}else if(cmd[2]=='3'){
}
}
}
}
}


int main(){
display1();
return 0;
}

















@@ -0,0 +1,315 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Len 1000
#define isTest 1


typedef struct {
int *con,len,sig; //sig=1 -> 正数 sig=0 -> 负数
}Num;

typedef struct {
Num *nums;
int *sig; //[0]代表运算种类,[1]代表较大数位置
Num *res;
}Pro;

int power(int a,int x){
int res=1;
for(int i=0;i<x;i++){
res*=a;
}
return res;
}

int bigger(Num *num1,Num *num2){
if(num1->sig>0&&num2->sig<0){return 1;}
else if(num1->sig<0&&num2->sig>0){return 2;}
else{
int tig=num1->sig;
for(int digit=Len-1;digit>=0;digit--){
if(num1->con[digit]>num2->con[digit]){
return tig?1:2;
}else if(num1->con[digit]<num2->con[digit]){
return tig?2:1;
}else if(digit==0){ return 0; }
}
}
}


//比较两个num绝对值的大小。
int num_abs_compare(Num *num1,Num *num2){
for(int digit=Len-1;digit>=0;digit--){
if(num1->con[digit]>num2->con[digit]){
return 1;
}else if(num2->con[digit]<num2->con[digit]){
return 2;
}else if(digit==0){
return 0;
}
}
}

//比较两个num真实值的大小。
int num_compare(Num *num1,Num *num2){
if(num1->sig>0&&num2->sig<0){
return 1;
}else if(num1->sig<0&&num2->sig>0){
return 2;
}else if(num1->sig>0&&num2->sig>0){
return num_abs_compare(num1,num2);
}else if(num1->sig<0&&num2->sig<0){
return num_abs_compare(num2,num1);
}
}

//比较num和0的大小。
int num_comto_zero(Num *num){
for(int digit=0;digit<Len;digit++){
if(num->con[digit]==0){
break;
}else if(digit==Len-1){
return 0;
}
}
if(num->sig){
return 1;
}else{
return -1;
}
}

//将字符串转为Num对象。
Num *str_to_Num(char *str){
Num *num=(Num*)calloc(1,sizeof(Num)); //分配num空间,初始化对象
num->con=(int*)calloc(Len,sizeof(int)); //分配num.con的空间
num->len=strlen(str); //获取字符串的长度
if(str[0]=='-'){ //获取num应有正负值,并对长度做修正。
num->sig=0;
num->len-=1;
}else{
num->sig=1;
}
for(int digit=0;digit<Len;digit++){ //将字符串主体写入num.con中
if(digit<num->len){
num->con[digit]=str[num->len-num->sig-digit]-'0';
}else {
num->con[digit]=0;
}
}
if(num_comto_zero(num)!=-1){num->sig=1;}
return num;
}

//将Num对象转为字符串。
char *Num_to_str(Num *tar){
char *res=(char*)calloc(Len,sizeof(char)); //分配字符串空间,初始化对象
int digit=0; //初始化数位
if(tar->sig==0){ //判断并执行写入符号位
res[digit++]='-';
}
for(int dig1=tar->len-1;dig1>=0;dig1--){ //将num.con写入字符串中
res[digit++]=tar->con[dig1]+'0';
}
return res;
}

//将int对象转化为Num对象。
Num *int_to_Num(int tar){
int digit=0;
Num *num=(Num*)calloc(1,sizeof(Num));
num->con=(int*)calloc(Len,sizeof(Num));
if(tar<0){num->sig=0;}
else{num->sig=1;}
for(digit=0;tar>0;digit++){
num->con[digit]=tar%10;
tar/=10;
}
num->len=digit;
return num;
}

//将Num对象转化为int对象(可能会爆表)。
int Num_to_int(Num *num){
int tar=0;
for(int digit=0;digit<Len;digit++){
tar+=num->con[digit]*power(10,digit);
}
tar*=num->sig=1?1:-1;
return tar;
}

//初始化pro对象
Pro *pro_creat(int sig){
Pro *pro=(Pro*)calloc(1,sizeof(Pro)); //分配pro空间
pro->sig=(int*)calloc(2,sizeof(int)); //分配并写入运算类型
pro->sig[0]=sig;
pro->nums=(Num*)calloc(2,sizeof(Num)); //分配运算对象空间
pro->nums[0].con=(int*)calloc(Len,sizeof(int));
pro->nums[1].con=(int*)calloc(Len,sizeof(int));
pro->res=(Num*)calloc(sig!=3?1:2,sizeof(Num)); //分配运算结果的空间
pro->res[0].con=(int*)calloc(Len,sizeof(int));
if(sig==3){pro->res[1].con=(int*)calloc(Len,sizeof(int));} //如果是除法,给余数分配空间
return pro;
}

//将num对象写入pro中。
void Num_to_pro(Pro *pro,Num *num,int dig){
pro->nums[dig]=*num;
}

//pro的正式运算
void pro_start(Pro *pro){
int bi,sm;
pro->sig[1]=num_abs_compare(pro->nums,pro->nums+1);
if(pro->sig[0]<2){
if(pro->sig[0]!=(pro->nums[0].sig*pro->nums[1].sig)){
//ba_add(pro->nums[0],pro->nums[1]);
//printf("开始加法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1));
// pro->res=str_to_Num("3999");
int tig=0;
for(int digit=0;digit<Len;digit++){
pro->res->con[digit]=pro->nums[0].con[digit]+pro->nums[1].con[digit]+tig;
//printf("%d",pro->res->con[digit]);
if(pro->res->con[digit]>9){
pro->res->con[digit]-=10;
tig=1;
}else{tig=0;}
}
if(tig==1){printf("数据过大溢出,请调整Len值后重新编译运行!\n");}
pro->res->sig=pro->nums->sig;
pro->res->len=(pro->sig[1]==1)?pro->nums[0].len:pro->nums[1].len;
}else{
//ba_dec(pro->nums[0],pro->nums[1]);
//printf("开始减法。对象为%s和%s\n",Num_to_str(pro->nums),Num_to_str(pro->nums+1));
if(pro->sig[1]==0){
pro->res=str_to_Num("0");
}else{
if(pro->sig[1]==1){
bi=0,sm=1;
pro->res->sig=pro->nums->sig;
}else if(pro->sig[1]==2){
bi=1,sm=0;
pro->res->sig=pro->nums->sig==1?0:1;
}
for(int digit=0,tig=0;digit<Len;digit++){
pro->res->con[digit]=pro->nums[bi].con[digit]-pro->nums[sm].con[digit]-tig;
if(pro->res->con[digit]<0){
pro->res->con[digit]+=10;
tig=1;
}else{
tig=0;
}
}
int len=0;
for(len=Len;pro->res->con[len-1]==0;len--){}
pro->res->len=len;
}
}
}else if (pro->sig[0]==2){
printf("开始乘法");
if(pro->nums[0].sig==pro->nums[1].sig){
pro->res->sig=1;
}else{pro->res->sig=0;}
for(int a=0;a<Len;a++){
pro->res->con[a]=0;
}
for(int a=0;a<Len;a++){
for(int b=0;b<Len;b++){
int mid=0;int tig=a+b;
pro->res->con[tig]+=pro->nums[0].con[a]*pro->nums[1].con[b];
while(pro->res->con[tig]>9){
mid=pro->res->con[tig]/10;
pro->res->con[tig]%=10;
pro->res->con[++tig]+=mid;
}
}
}
int len=0;
for(len=Len;pro->res->con[len-1]==0;len--){}
pro->res->len=len;
}else if (pro->sig[0]==3){
printf("开始除法");
Num *b1,*b2;
int mid,n;
b1=str_to_Num(Num_to_str(pro->nums[0]));
b2=str_to_Num("0");
for(int digit=pro->num[0].len-pro->num[1].len;digit>=0;digit--){
for(int dig=digit;digit<b1->len;digit--){
b2->con[dig]=b1->con[dig];
b1->con[dig]=0;
}
for(len=Len;b1[len-1]==0;len--){}
b1->len=len;
for(len=Len;b2[len-1]==0;len--){}
b2->len=len;
for(pro->res[0].con[dig]=0;num_compare(b2,pro->nums[1])==1;pro->res[0].con[dig]++){
Pro cal=pro_creat(1);
Num_to_pro(cal,b2,0);
Num_to_pro(cal,pro->nums+1,1);
pro_start(cal);
}
for(int dig=digit;digit<b1->len;digit--){

}
}
}

void test6(){

}

void test5(){
// for(int a=0;a<1000;a++){
// for(int b=0;b<1000;b++){
int a=11;int b=1100;
Pro *pro=pro_creat(2);
Num_to_pro(pro,int_to_Num(a),0);
Num_to_pro(pro,int_to_Num(b),1);
pro_start(pro);
printf("%d * %d = %s\n",a,b,Num_to_str(pro->res));
// }}
}

void test4(){
printf("1000 is %s\n",Num_to_str(int_to_Num(1000)));
printf("1000 is %d\n",Num_to_int(str_to_Num("1000")));
}

void test3(){
char *one="1000";
char *two="1";
Pro *pro=pro_creat(1);
Num_to_pro(pro,str_to_Num(one),0);
Num_to_pro(pro,str_to_Num(two),1);
pro_start(pro);
printf("%s\n",Num_to_str(pro->res));
}

void test2(){
char *num_char="-1000000000000031415926";
Num *num=str_to_Num(num_char);
printf("%s\n",Num_to_str(num));

}



void test1(){
int length=100;
Num *num=(Num*)calloc(1,sizeof(Num));
num->sig=1;
num->con=(int*)calloc(Len,sizeof(int));
for(int digit=0;digit<length;digit++){
num->con[digit]=9;
} num->len=length;
printf("%s\n",Num_to_str(num));
}

int main(){
test5();
return 0;
}
Binary file not shown.
@@ -0,0 +1,124 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define isTest 1
struct para_cal{
char *con;
int cen[128],words[26];
int len;
};

struct para_cal *init_para(char *parag){
struct para_cal *para=(struct para_cal*)calloc(1,sizeof(struct para_cal));
para->len=strlen(parag);
para->con=(char*)calloc(para->len,sizeof(char));
for(int i=0;i<para->len;i++){
para->con[i]=parag[i];
}
return para;
}

int char_cen(struct para_cal *para){
para->len=strlen(para->con);
for(int i=0;i<128;i++){para->cen[i]=0;}
for(int digit=0;digit<para->len;digit++){
if(para->con[digit]>127||para->con[digit]<0){
printf("please input right words,be sure they are Ascii!\n");
return 1;
}
para->cen[para->con[digit]]++;
}
for(int i=0;i<26;i++){
para->words[i]=para->cen[64+i]+para->cen[97+i];
}
return 0;
}

void print_words_cen(struct para_cal *para){
char *out=(char*)calloc(para->len+1,sizeof(char));
for(int i=0;i<26;i++){
printf("%c %d \n",i+65,para->words[i]);
}
}

void print_word(char *p,int len){
char *i=(char*)calloc(len+1,sizeof(char));
for(int m=0;m<len;m++){
i[m]=p[m];
} i[len]='\0';
printf("%d\t%s\n",len,i);
}

char *search_replace(char *para,char *sea,char *tar){
int len1=strlen(para);
int len2=strlen(sea);
int len3=strlen(tar);
printf("%d %d %d \n",len1,len2,len3);
char *one,*two,*the,*sto,*res;
sto=(char*)calloc(len1,sizeof(char));
for(int i=0;i<len1;i++){
sto[i]=para[i];
} if(isTest==1){print_word(sto,len1);}
for(int digit=0;digit<len1-len2+1;printf("digit:%d\n",++digit)){
int dig=0;
for(dig=0;dig<len2;dig++){
if(sto[digit+dig]!=sea[dig]){break;}
} if(dig==len2){

one=(char*)calloc(digit,sizeof(char));
for(dig=0;dig<digit;dig++){
one[dig]=sto[dig];
} if(isTest==1){print_word(one,digit);}

two=(char*)calloc(len3,sizeof(char));
for(dig=0;dig<len3;dig++){
two[dig]=tar[dig];
} if(isTest==1){print_word(two,len3);}

the=(char*)calloc(len1-digit-len2,sizeof(char));
for(dig=0;dig<len1-digit-len2;dig++){
the[dig]=sto[digit+len2+dig];
} if(isTest==1){print_word(the,len1-digit-len2);}

res=(char*)calloc(len1+len3-len2+1,sizeof(char));
for(int i=0;i<len1+len3-len2+1;i++){
if(i<digit){
res[i]=sto[i];
}else if(i<digit+len3){
res[i]=tar[i-digit];
}else {
res[i]=the[i-len3-digit];
}
} res[len1+len3-len2]='\0';
printf("%s\n",res);
}
}
return res;
}

void file_save(char *artical,char *name){
FILE *file=fopen(name,"w");
for(int i=0;artical[i]!='\0';i++){
fputc(artical[i],file);
}
fclose(file);
}

void display1(){
char artical[100]="hello world!";
struct para_cal *pro=init_para(artical);
char_cen(pro);
print_words_cen(pro);
}

void display2(){
char artical[100]="111111222111";
char *res=search_replace(artical,"222","333");
printf("%s\n",res);
char name[10]="date.txt";
file_save(artical,name);
}
int main(){
display2();
return 0;
}
@@ -0,0 +1,21 @@
#include<stdio.h>
void strcpy(char *in,char *out){
for(int i=0;in[i-1]!='\0';i++){
out[i]=in[i];
}
}
int strcmp(char *one,char *two){
int tig1=1,tig2=1;
for(int i=0;tig1||tig2;i++){
if(one[i]>two[i]){
return 1;
}else if(two[i]>one[i]){
return -1;
}
}
return 0;
}

int main(){
return 0;
}
@@ -0,0 +1,133 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define isTest 0
struct para_cal{
char *con;
int cen[128],words[26];
int len;
};

struct para_cal *init_para(char *parag){
struct para_cal *para=(struct para_cal*)calloc(1,sizeof(struct para_cal));
para->len=strlen(parag);
para->con=(char*)calloc(para->len,sizeof(char));
for(int i=0;i<para->len;i++){
para->con[i]=parag[i];
}
return para;
}

int char_cen(struct para_cal *para){
para->len=strlen(para->con);
for(int i=0;i<128;i++){para->cen[i]=0;}
for(int digit=0;digit<para->len;digit++){
if(para->con[digit]>127||para->con[digit]<0){
printf("please input right words,be sure they are Ascii!\n");
return 1;
}
para->cen[para->con[digit]]++;
}
for(int i=0;i<26;i++){
para->words[i]=para->cen[64+i]+para->cen[97+i];
}
return 0;
}

void print_words_cen(struct para_cal *para){
char *out=(char*)calloc(para->len+1,sizeof(char));
for(int i=0;i<26;i++){
printf("%c %d \n",i+65,para->words[i]);
}
}

void print_word(char *p,int len){
char *i=(char*)calloc(len+1,sizeof(char));
for(int m=0;m<len;m++){
i[m]=p[m];
} i[len]='\0';
printf("%d\t%s\n",len,i);
}

char *search_replace(char *para,char *sea,char *tar){
int len1=strlen(para);
int len2=strlen(sea);
int len3=strlen(tar);
if(isTest){printf("%d %d %d \n",len1,len2,len3);}
char *one,*two,*the,*sto,*res;
sto=(char*)calloc(len1,sizeof(char));
for(int i=0;i<len1;i++){
sto[i]=para[i];
} if(isTest==1){print_word(sto,len1);}
for(int digit=0;digit<len1-len2+1;++digit){
int dig=0;
for(dig=0;dig<len2;dig++){
if(sto[digit+dig]!=sea[dig]){break;}
} if(dig==len2){

one=(char*)calloc(digit,sizeof(char));
for(dig=0;dig<digit;dig++){
one[dig]=sto[dig];
} if(isTest==1){print_word(one,digit);}

two=(char*)calloc(len3,sizeof(char));
for(dig=0;dig<len3;dig++){
two[dig]=tar[dig];
} if(isTest==1){print_word(two,len3);}

the=(char*)calloc(len1-digit-len2,sizeof(char));
for(dig=0;dig<len1-digit-len2;dig++){
the[dig]=sto[digit+len2+dig];
} if(isTest==1){print_word(the,len1-digit-len2);}

res=(char*)calloc(len1+len3-len2+1,sizeof(char));
for(int i=0;i<len1+len3-len2+1;i++){
if(i<digit){
res[i]=sto[i];
}else if(i<digit+len3){
res[i]=tar[i-digit];
}else {
res[i]=the[i-len3-digit];
}
} res[len1+len3-len2]='\0';
if(isTest){printf("%s\n",res);}
}
}
return res;
}

void file_save(char *artical,char *name){
FILE *file=fopen(name,"w");
for(int i=0;artical[i]!='\0';i++){
fputc(artical[i],file);
}
fclose(file);
}

void display1(){
char artical[100]="hello world!";
struct para_cal *pro=init_para(artical);
char_cen(pro);
printf("word:%s\n",artical);
print_words_cen(pro);
}

void display2(){
char artical[100]="111111222111";
char tore[100]="333";
char bere[100]="222";
printf("the sentence before:\n\"%s\"\n",artical);
printf("Want the \"%s\" to be replaced as \"%s\"\n",bere,tore);
char *res=search_replace(artical,bere,tore);
printf("%s\n",res);
char name[10]="date.txt";
printf("save file as %s\n",name);
file_save(artical,name);
}
int main(){
printf("display1:\n");
display1();
printf("display2:\n");
display2();
return 0;
}
Binary file not shown.
@@ -0,0 +1,137 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define isTest 0
struct context{
int stat; //1:句前空格
//2:句中
//3:句中空格1
//4:句中空格2(多余)
char *sentence;
int len;
};

struct cen{
char *sen;
char *word;
int cen;
};

struct context *init(char *insen){
struct context *con=(struct context*)calloc(1,sizeof(struct context));
con->sentence=insen;
con->stat=1;
return con;
}

void process(struct context *con){
int dig=0;
con->len=strlen(con->sentence);
if(isTest==1){printf("len: %d\n",con->len);}
int tig,digit;
for(digit=0,tig=0;digit<con->len+1&&tig==0;){
if(isTest==1){printf("%d %d '%c'\n",con->stat,digit,con->sentence[digit]);}
switch (con->stat){
case 1://初始状态
if(con->sentence[digit]==32){
if(isTest==1){printf("1~1\n");}
for(dig=digit;dig<con->len-1;dig++){
con->sentence[dig]=con->sentence[dig+1];
if(isTest==1){printf("$$$%d-%d:'%c'\n",dig,con->len,con->sentence[dig]);}
} con->sentence[dig]='\0';
if(isTest==1){printf("$$$\n");}
con->len=strlen(con->sentence);
if(isTest==1){printf("$$$\n");}
}else{
if(isTest==1){printf("1~2\n");}
con->stat=2;
digit++;
}
break;
case 2://句中
if(con->sentence[digit]==32){
if(isTest==1){printf("2~1\n");}
con->stat=3;
digit++;
}else if(con->sentence[digit]=='\0'){
if(isTest==1){printf("2~2\n");}
tig=1;
}else{
if(isTest==1){printf("2~3\n");}
digit++;
}
break;
case 3://句中空格
if(con->sentence[digit]==32){
if(isTest==1){printf("3~1\n");}
for(dig=digit;dig<con->len-1;dig++){
con->sentence[dig]=con->sentence[dig+1];
if(isTest==1){printf("$$$%d-%d:'%c'\n",dig,con->len,con->sentence[dig]);}
} con->sentence[dig]='\0';
con->len=strlen(con->sentence);
}else if(con->sentence[digit]=='\0'){
if(isTest==1){printf("3~2\n");}
con->sentence[digit-1]='\0';
tig=1;
}else {
if(isTest==1){printf("3~3\n");}
con->stat=2;
digit++;
}
}
}
}

struct cen *ce(char *sen,char *word){
struct cen *ce=(struct cen*)calloc(1,sizeof(struct cen));
ce->sen=sen;
ce->word=word;
ce->cen=0;
return ce;
}

struct cen *sen_cen(struct cen *ce){
int len=strlen(ce->sen);
int len2=strlen(ce->word);
for(int digit=0;digit<len;digit++){
if(isTest==1){printf("sss %d \n",digit);}
if(digit==0||(digit>0&&ce->sen[digit-1]==32)){
for(int dig=0;dig<len2;dig++){
if(isTest==1){printf("ooo %d -- %d--%d\n",digit,dig,len2);}
if(ce->sen[digit+dig]!=ce->word[dig]){
if(isTest==1){printf("different\n");}
break;
}
if(dig==len2-1&&ce->sen[digit+dig+1]==32){
ce->cen++;
}
}}
}
return ce;
}

void display1(){
char sen[100]=" hello ! @ ";
process(init(sen));
printf("%s\n",sen);
for(int i=0;i<strlen(sen);i++){
printf("-%d",sen[i]);
} printf("\n");
}

void display2(){
char sen[100]=" hello11 hello iihello hello world! ";
char word[100]="hello";
struct cen *ce1=sen_cen(ce(sen,word));
printf("The sentence you put in is :\n\"%s\"\n",sen);
printf("The word you want to search is \"%s\"\n",word);
//printf("%s in %s :%d\n",ce1->word,ce1->sen,ce1->cen );
printf("There are : %d \n",ce1->cen);
process(init(sen));
printf("After process , the sentence came in to :\n\"%s\"\n",sen);
}

int main(){
display2();
return 0;
}