zoukankan      html  css  js  c++  java
  • 文章编辑(数据结构)代码

    #include <string.h>
    #include <stdio.h>
    #include <malloc.h> 
    #include <stdlib.h>
    typedef struct LNode
    {
    	char *data;//字符串 
    	struct LNode *next;
    }LinkNode;
    
    void OutPut(LinkNode *L) 
    {
    	LinkNode *p=L;  //将头指针赋值给P 
    	printf("
    ");
    	do
    	{
    		printf("%s
    ", p->data);
    	} 
    	while((p=p->next)!=NULL);   //遍历链表
    	printf("
    "); 
    }
    void menu()
    {
    	printf("====================文章编辑=============================
    ");
    	printf("===       1.输出文章                                  ===
    ");
    	printf("===       2.统计输出统计字数                          ===
    ");
    	printf("===       3.统计某一字符串在文章中出现的次数          ===
    ");
    	printf("===       4.删除文章中某一字符串及删除后的文章        ===
    ");
    	printf("===       5.增加内容                                  ===
    ");
    	printf("===       6.整行删除                                  ===
    ");
    	printf("=========================================================");
    	printf("
    
    
    ");
    }
    void Create(LinkNode * &L) //字符创的创建函数 
    {
    	printf("请输入一页文章,以Ctrl+E为结尾(每行最多输入80个字符):
    ");
    	LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode)); //首先为链表建立一个附加表头结点 
    	L=p;           //将p赋值给表头指针 
    	char tmp[100];  //输入的字符串 
    	while(1)
    	{
    		gets(tmp);   //输入字符串  
    		if(strlen(tmp)>80)  //strlen求字符串的长度 
    		{
    			printf("每行最多输入80个字符!");
    			break;
    		} 
    		if(tmp[0]==5)
    		  break;   //如果发现输入E,则退出输入
    		p=p->next=(LinkNode *)malloc(sizeof(LinkNode));
    		p->data=(char *)malloc(sizeof(char));//为结点分配空间
    		strcpy(p->data, tmp);  //把tmp复制给p->data  strcpy()函数用来复制字符串 
    		if(tmp[strlen(tmp)-1]==5)   //除去最后一个控制符E
    		{
    			p->data[strlen(tmp)-1]='';
    			break;
    		}
    	}
    	p->next=NULL;    //最后一个指针为空
    	L=L->next;
    	OutPut(L);
    	printf("
    ");
    	menu(); 
    }
    //统计英文字母数
    void CountLetter(LinkNode * &L)  //计算英文字母字数 
    {
    	LinkNode *p=L;
    	int count=0;
    	do
    	{
    		int Len=strlen(p->data); //计算当前data里的数据元素个数
    		for(int i=0; i<Len; i++)
    		{
    			if((p->data[i]>='a' && p->data[i]<='z')||(p->data[i]>='A' && p->data[i]<='Z')) //计算英文字母数
    			count++; 
    		} 
    	}
    	while((p=p->next)!=NULL);
        printf("文章中全部英文字母个数:%d
    ", count); 
    }
    void CountSpace(LinkNode * &L)
    {
    	LinkNode *p=L;
    	int count=0;
    	do
    	{
    		int Len=strlen(p->data);
    		for(int i=0; i<Len; i++)
    		if(p->data[i]==' ')   
    		   count++; 
    	}
    	while((p=p->next)!=NULL);
        printf("文章中空格个数:%d", count);
    	printf("
    ");
    }
    void CountNumber(LinkNode * &L)  //计算数字字数 
    {
    	LinkNode *p=L;
    	int count=0;
    	do
    	{
    		int Len=strlen(p->data);
    		for(int i=0; i<Len; i++)
    		{
    		   if(p->data[i]>='0' && p->data[i]<='9')   
    		   count++;
    	    }
    	}
    	while((p=p->next)!=NULL);
    	printf("文章中数字个数:%d
    ", count);
    	printf("
    "); 
    }
    void CountAll(LinkNode * &L)
    {
    	LinkNode *p=L;
    	int count=0;
    	do
    	{
    		count+=strlen(p->data);
    	}
    	while((p=p->next)!=NULL);
        printf("文章总字数:%d
    ", count);
    	printf("
    ");
    }
    void FindString(LinkNode * &L)
    {
    	LinkNode *p=L;
    	int count=0, len1=0, len2, i, j, k;
    	char str1[20];
    	printf("请输入需要统计的字符串:");
    	scanf("%s", str1); //
    	len2=strlen(str1);
    	do
    	{
    		len1=strlen(p->data);
    		for(i=0; i<len1; i++)
    		{
    			if(p->data[i]==str1[0])
    			{
    				k=0;
    				for(j=0; j<len2; j++)
    				{
    					if(p->data[i+j]==str1[j])
    					   k++;
    				    if(k==len2)
    				    {
    				    	count++;
    				    	i=i+k-1;
    					}
    				}
    			}
    		}
    	}
    	while((p=p->next)!=NULL); //遍历链表
    	printf("该字符串在文中出现的次数:%d
    ", count);
    	printf("
    ");
    }
    //删除指定的字符串
    int delstringword(char *s, char *str)  //*s为输入的字符串,*str为将要删除的字符串 
    {
    	//从字符串中寻找str第一次出现的位置
    	char *p=strstr(s,str);
    	char tmp[80];
    	int len=strlen(s);
    	int i=len-strlen(p);
    	int j=i+strlen(str);
    	int count=0;
    	for(int m=0; m<i; m++)
    	   tmp[count++]=s[m];
    	for(int n=j; n<len; n++) 
    	   tmp[count++]=s[n];
    	tmp[count]='';
    	strcpy(s,tmp);
    	return count;
    } 
    void DelString(LinkNode * &L)
    {
    	int count=0;
    	LinkNode *p=L;
    	char str[20];
    	printf("请输入需要删除的某一字符串:");
    	scanf("%s", str);
    	do
    	{
    		while(strstr(p->data, str)!=NULL){
    			delstringword(p->data,str);
    		}
    		
    	}
    	while((p=p->next)!=NULL);
    	printf("删除指定字符串后的文章为:
    ");
    	OutPut(L);
    }
    void AddContent(LinkNode * &L){
    	LinkNode *p=L;
    	while(p->next!=NULL){
    		p=p->next;
    	};
    	char tmp[100];  //输入的字符串
    	printf("请输入一行内容(不超过80个字符长度):"); 
    	getchar();   //输入字符串  
    	gets(tmp);
    	if(strlen(tmp)>80)  //strlen求字符串的长度 
    	{
    		printf("每行最多输入80个字符!");
    		return;
    	} 
    	p=p->next=(LinkNode *)malloc(sizeof(LinkNode));
    	p->data=(char *)malloc(sizeof(char));//为结点分配空间
    	p->next=NULL;    //最后一个指针为空
    	strcpy(p->data, tmp);  //把tmp复制给p->data  strcpy()函数用来复制字符串 
    	OutPut(L);
    	printf("
    ");
    }
    void DelLine(LinkNode * &L){
    	LinkNode *p=L,*temp;
    	int l,count=1; 
    	printf("请输入你想删除的行数:");
    	scanf("%d",&l);
    	while(p->next!=NULL){
    		if(l==count){
    			p->data=p->next->data;
    			p->next=p->next->next; 
    			return;
    		}
    		temp=p;
    		p=p->next;
    		count++;
    	};
    	if(l==count){
    		temp->next=NULL;
    	}
    	else 
    	printf("输入有误。
    ");
    }
    int main()
    {
    	LinkNode *L;
    	int i;
    	Create(L);
    	while(1)
    	{
    		printf("请输入相应指令:
    ");
    		scanf("%d", &i);
    		system("cls");
    
    		switch(i)
    		{
    			case 1:OutPut(L);break; 
    			case 2:CountSpace(L);CountLetter(L);CountNumber(L);CountAll(L); break;
    			case 3:FindString(L);  break;
    			case 4:DelString(L); break;
    			case 5:AddContent(L);break;
    			case 6:DelLine(L);break;
    			default:printf("您输入的数字有误
    "); 
    		}
    		menu();
    		
    	} 
    }
    
    
    
  • 相关阅读:
    InnoDB实现MVCC原理
    Python中定义函数时参数有默认值的小陷阱
    Python系统编程笔记
    Python中的字典
    Python中常见的字符串小笔试题
    Oracle常见名词解析
    Oracle数据库面试题【转载】
    Oracle日期语言修改
    Oracle日期时间函数大全
    Oracle数据库分页的三种方法
  • 原文地址:https://www.cnblogs.com/szy5201314/p/14175387.html
Copyright © 2011-2022 走看看