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;
}
}
}