學習記錄(2018年7月25日)
阿新 • • 發佈:2018-12-27
1、編寫一個C函式,將句子中的單詞位置倒置,而不改變單詞內部結構.
#include <stdio.h> #include <stdlib.h> #include <string.h> void str_rev(char *str, int len) { int i; char tmp; for(i = 0; i < len/2; i++) { tmp = *(str + i); *(str + i) = *(str + len - 1 - i); *(str + len - 1 - i) = tmp; } } void word_rev(char *str, int len) { char *p; int i, word_len = 0; p = (char *)malloc(sizeof(char)*50); while(*str != '\0') { if(*str == ' ') { str_rev(str - word_len, word_len); word_len = 0; } else { word_len++; } str++; } } int main() { int i, len, flag = 0; char *str; str = (char *)malloc(sizeof(char)*100); printf("Please input:\n"); scanf("%[^\n]",str); len = strlen(str); for(i = 0; i < len; i++) { if(*(str+i) == ' ') { flag = 1; } } if(flag == 0) { printf("Input error!\n"); exit(1); } str_rev(str, len); word_rev(str, len); printf("Output:\n %s\n",str); return 0; }
2、輸入一個字串,同時輸入幀頭和幀尾(可以是多個字元),將該字串中合法的幀識別出來.提示:幀頭和幀尾分別是head和tail 字串”asdheadhauboisoktail”中headhauboisoktail是合法幀。
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int len, i, start, end; char *str; str = (char *)malloc(sizeof(char)*64); scanf("%s",str); len = strlen(str); for(i = 0; i < len-3; i++) { if(strncmp(str+i, "head", 4) == 0) { start = i; } if(strncmp(str+i, "tail", 4) == 0) { end = i; } } for(i = start; i < end+4; i++) { printf("%c",*(str+i)); } printf("\n"); return 0; }
3、用c語言連結串列實現簡易通訊錄,修改除錯如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #define LEN sizeof(struct information) typedef struct information { char name[20]; char id[20]; char phone[20]; char home[20]; struct information *next; }INFO; /*face()用來顯示通訊錄的基本功能選擇。*/ void face() { printf("****************************\n"); printf("請輸入你需要進行的操作號碼:\n"); printf("\t1:顯示通訊錄已有資訊。\n"); printf("\t2:新增通訊錄人員。\n"); printf("\t3:刪除通訊錄人員。\n"); printf("\t4:修改通訊錄人員資訊。\n"); printf("\t5:查詢通訊錄人員資訊。\n"); printf("\t6:儲存通訊錄。\n\n"); printf("\t9:清屏。\n"); printf("\t0:退出通訊錄。\n"); printf("****************************\n"); } /*print()用來顯示通訊錄已有資訊。*/ void print(INFO *head) { INFO *p; p = head; system("clear"); if(head!=NULL) { printf("已有成員如下:\n"); do { printf("姓名:%s\n",p->name); printf("ID:%s\n",p->id); printf("電話號碼:%s\n",p->phone); printf("家庭住址:%s\n\n",p->home); p=p->next; }while(p!=NULL); } else { printf("對不起!!沒有任何聯絡人記錄!!\n\n"); printf("****************************\n"); } } /*add()新增通訊錄資訊,將資訊存入p0節點*/ INFO *add(INFO *head) { INFO *p0 = NULL, *p1, *p2; p0 = (INFO *)malloc(LEN); p1 = head; p2 = head; printf("請輸入你需要新增的成員資訊:\n"); printf("****************************\n"); printf("姓名:"); scanf("%s",p0->name); printf("ID:"); scanf("%s",p0->id); printf("電話號碼:"); scanf("%s",p0->phone); printf("家庭住址:"); scanf("%s",p0->home); /*再將p0節點按姓名順序存入通訊錄。*/ if(head==NULL) { head=p0; p0->next=NULL; } else { while((strcmp(p0->name,p1->name)>0)&&(p1->next!=NULL)) { p2=p1; p1=p1->next; } if((strcmp(p0->name,p1->name))<=0) { if(head==p1) head=p0; else p2->next=p0; p0->next=p1; } else { p1->next=p0; p0->next=NULL; } printf("恭喜你!!成功添加了聯絡人資訊!!"); printf("\n************************************************************\n"); printf("\n\n"); } return head; /* //在通訊錄頭部插入 if(head == NULL) { head = p0; head->next = NULL; } else { p0->next = head->next; head->next = p0; } return head; //在通訊錄尾部插入 if(head == NULL) { head = p0; head->next = NULL; } else { while(p1->next!=NULL) { p2 = p1; p1 = p1->next; } p1->next = p0; p0->next = NULL; } return head; */ } /*delete()刪除通訊錄人員資訊。*/ INFO *delete(INFO *head) { INFO *p1, *p2; char name[10]; p1 = head; p2 = head; printf("請以姓名為關鍵字,輸入需要刪除的成員資訊:\n"); printf("****************************\n"); scanf("%s",name); if (head==NULL) { printf("很抱歉!沒有任何聯絡人紀錄!\n"); printf("\n*******************************************************\n"); return(head); } while(p1!=NULL) { if(strcmp(p1->name,name)==0) { if(p1==head) head=p1->next; else p2->next=p1->next; free(p1); printf("刪除記錄成功!\n"); return(head); } p2=p1; p1=p1->next; } printf("對不起!沒有要刪除的聯絡人紀錄!\n"); return head; } /*rev()修改通訊錄人員資訊。*/ void revise(INFO *head) { INFO *p1, *p2; char name[10]; p1 = head; p2 = head; printf("請以姓名為關鍵字,輸入需要修改的成員資訊:\n"); printf("****************************\n"); scanf("%s",name); while(p1!=NULL) { if(strcmp(p1->name,name)==0) { printf("請根據提示修改成員資訊:\n"); printf("將姓名%s修改為:",p1->name); scanf("%s",p1->name); printf("將ID%s修改為:",p1->id); scanf("%s",p1->id); printf("將電話號碼%s修改為:",p1->phone); scanf("%s",p1->phone); printf("將家庭住址%s修改為:",p1->home); scanf("%s",p1->home); printf("修改成功。\n"); break; } p2=p1; p1=p1->next; } if(p1==NULL) printf("對不起!!沒有該聯絡人的紀錄!!\n"); } /*search()查詢通訊錄人員資訊。*/ void search(INFO *head) { INFO *p1, *p2; char name[10]; p1 = head; p2 = head; printf("請以姓名為關鍵字,輸入需要查詢的成員資訊:\n"); printf("****************************\n"); scanf("%s",name); while(p1!=NULL) { if(strcmp(p1->name,name)==0) { printf("查詢到如下資訊:\n"); printf("姓名:%s\n",p1->name); printf("ID:%s\n",p1->id); printf("電話號碼:%s\n",p1->phone); printf("地址:%s\n",p1->home); break; } p2=p1; p1=p1->next; } if(p1==NULL) printf("對不起!!沒有該聯絡人的紀錄!!\n"); } void save(INFO *head) { INFO *p; FILE } int main() { int choose; INFO *head = NULL; head = (INFO *)malloc(LEN); system("clear"); while(1) { face(); scanf("%d",&choose); switch(choose) { case 0:system("clear");return 0; case 1:print(head);break; case 2:head = add(head);break; case 3:head = delete(head);break; case 4:revise(head);break; case 5:search(head);break; case 6:save(head);break; case 9:system("clear");break; default :printf("輸入錯誤!\n");break; } } }