Advertisement

c语言字符串的基本操作(湖北汽车工业学院数据结构实验)

阅读量:
复制代码
    #include<stdio.h>
    #include<stdlib.h>
    //#define NULL 0        
    typedef struct node
    {
    	char ch;    
    	struct node *next;
    }STRNODE;                      //串的链式存储结构表示
           
    int str_len(STRNODE *s)            //串的长度计算函数/
    {
    return s->ch;                      
    }
    
    void str_input(STRNODE *s)          //串的输入函数/
     {
    	int i=0;                  
    	char ch;
    	STRNODE *p,*q;
    	p=s;
    	q=s->next;
    	s->ch=0;
    	while((ch=getchar())!='\n')         //通过循环,从键盘输入一串字符串
    	{
    		q=(STRNODE *)malloc(sizeof(STRNODE));
    		q->ch=ch;
    		q->next=NULL;
    		p->next=q;
    		p=q;
    		s->ch++;
    	}	
    }
    
    STRNODE *str_rep(STRNODE *s1,STRNODE *s2,int pos)  
    { //将字符串S1从pos位置处替换S2串
    int i=1;
    	STRNODE *p,*q;
    	p=s1->next;
    	q=s2->next;
    	while(p!=NULL&&i!=pos)
    	{
    		i++;
    		p=p->next;
    	}
    for(i=1;i<=s2->ch;i++)
    	{
    		p->ch=q->ch;
    	    p=p->next;
    		q=q->next;
    	}
    return s1;
    }
    
    STRNODE *str_con(STRNODE *s1,STRNODE *s2)  
    { //将字符串S2连接到S1串的后面,两个串合并成一个串,放到S1串中/
       STRNODE *p;
     p=s1;
     while(p->next!=NULL)
     {
         p=p->next;
     }
     p->next=s2->next;
     s1->ch+=s2->ch;
     return s1;
     
    }
    
    STRNODE *str_sub(STRNODE *sub,STRNODE *s,int pos,int len)
    {//将串s第pos个字符开始的长度为len的字符序列复制到串sub中
       int i;
       STRNODE *p,*q,*p1;
       if(pos>s->ch)
       	 {
    	printf("输入子串起始位置超过字符串总长度!\n");
    	printf("请重新输入子串起始位置!");
    	scanf("%d",&pos);
       	 }
       p1=s->next;
       p=sub;
       q=sub->next;
       sub->ch=0;
       for(i=1;i<=pos;i++)
       {
       	 p1=p1->next;
       }
       for(i=1;i<=len&&(i+pos-1)<s->ch;i++)
       {
    	   q=(STRNODE *)malloc(sizeof(STRNODE));
       q->ch=p1->ch;
    	   q->next=NULL;
       p->next=q;
       p=q;
    	   p1=p1->next;
    	   sub->ch++;
    	  
       }
    return sub;
    
    }
    
    void str_print(STRNODE *s)
    {//字符串输出显示
    	int i;
    STRNODE *p;
    	p=s->next;
    	for(i=0;i<s->ch;i++)
    	{
    		putchar(p->ch);
    	    p=p->next;
    	}
    printf("\n");
    }
    void showmenu()
    {          //显示菜单
    	printf("    欢迎使用串操作小软件\n");
    	printf("\t1、求串的长度\n");
    	printf("\t2、串的替换\n");
    	printf("\t3、串的连接\n");
    	printf("\t4、求子串\n");
    	printf("\t5、退出程序\n");	
    }
    void main()
    {
       	int position,length,no;
    	STRNODE str,str1,str2;  
    str.ch=0;
    	str1.ch=0,str2.ch=0;
    	while(1)
    	{
    		showmenu();
    		printf("    请输入你的选择:");
    		scanf("%d",&no);
    		switch(no)
    		{
    			case 1:printf("请输入一串字符:");
    				   fflush(stdin);
    				   str_input(&str);
    				   length=str_len(&str);
    				   printf("字符串:");
    				   str_print(&str);
    				   printf("长度为:%d\n",length);
    				   system("pause");
    				   system("cls");
    				   break;
    			case 2:printf("请输入源字符串:");
    				   fflush(stdin);
    				   str_input(&str1);
                   printf("请输入替换字符串:");
    				   fflush(stdin);
    				   str_input(&str2);
    				   printf("请输入替换位置:");
    				   scanf("%d",&position);
                   str_rep(&str1,&str2,position);
    				   printf("替换后的结果为:");
    				   str_print(&str1);
    				   system("pause");
    				   system("cls");
    				   break;
    			case 3:printf("请输入第一串字符:");
    				   fflush(stdin);
    				   str_input(&str1);
                   printf("请输入第二串字符串:");
    				   fflush(stdin);
    				   str_input(&str2);
    				   str_con(&str1,&str2);
    				   printf("两串字符连接后的结果为:");
    				   str_print(&str1);
    				   system("pause");
    				   system("cls");
    				   break;
    			case 4:printf("请输入一串字符:");
    				   fflush(stdin);
    				   str_input(&str1);
    				   printf("请输入取子串的位置和长度:");
    				   scanf("%d%d",&position,&length);
                   str_sub(&str,&str1,position,length);
    				   printf("子串为:");
                   str_print(&str);
    				   system("pause");
    				   system("cls");
    				   break;
           	case 5:
    				   return;
    		}
    }		
    }
复制代码

全部评论 (0)

还没有任何评论哟~