栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C数据结构中串简单实例

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C数据结构中串简单实例

C数据结构中串简单实例

运行截图:

实例代码:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

#define MAXSIZE 40 

typedef int Status;		
typedef char String[MAXSIZE+1]; 


void StrPrint(String T)
{
	int i;
	for(i=1;i<=T[0];i++)
		printf("%c",T[i]);
	printf("n");
}


Status StrEmpty(String S)
{
	if(S[0]==0)
		return TRUE;
	else
		return FALSE;
}


Status StrAssign(String T,char *chars)
{
	int i;
	if(strlen(chars)>MAXSIZE)
		return ERROR;
	else
	{
		T[0]=strlen(chars);
		for(i=1;i<=T[0];i++)
			T[i]=*(chars+i-1);
		return OK;
	}
}


int StrLength(String S)
{
	return S[0];
}



int StrCompare(String S,String T)
{
	int i;
	for(i=1;i<=S[0]&&i<=T[0];++i)
		if(S[i]!=T[i])
			return S[i]-T[i];
	return S[0]-T[0];
}


Status Concat(String T,String S1,String S2)
{
	int i;
	if(S1[0]+S2[0]<=MAXSIZE)
	{ 
		for(i=1;i<=S1[0];i++)
			T[i]=S1[i];
		for(i=1;i<=S2[0];i++)
			T[S1[0]+i]=S2[i];
		T[0]=S1[0]+S2[0];
		return TRUE;
	}
	else
	{ 
		for(i=1;i<=S1[0];i++)
			T[i]=S1[i];
		for(i=1;i<=MAXSIZE-S1[0];i++)
			T[S1[0]+i]=S2[i];
		T[0]=MAXSIZE;
		return FALSE;
	}
}


Status SubString(String Sub,String S,int pos,int len)
{
	int i;
	if(pos < 1||pos>S[0]||len < 0||len>S[0]-pos+1)
		return ERROR;
	for(i=1;i<=len;i++)
		Sub[i]=S[pos+i-1];
	Sub[0]=len;
	return OK;
}



int Index(String S, String T, int pos)
{
	int i = pos;	
	int j = 1;				
	while (i <= S[0] && j <= T[0]) 
	{
		if (S[i] == T[j]) 	
   	{
			++i;
     	++j;
   	}
   	else 				
   	{
     	i = i-j+2;		
     	j = 1; 			
   	}
	}
	if (j > T[0])
		return i-T[0];
	else
		return 0;
}



Status StrInsert(String S,int pos,String T)
{
	int i;
	if(pos< 1||pos>S[0]+1)
		return ERROR;
	if(S[0]+T[0]<=MAXSIZE)
	{ 
		for(i=S[0];i>=pos;i--)
			S[i+T[0]]=S[i];
		for(i=pos;i < pos+T[0];i++)
			S[i]=T[i-pos+1];
		S[0]=S[0]+T[0];
		return TRUE;
	}
	else
	{ 
		for(i=MAXSIZE;i<=pos;i--)
			S[i]=S[i-T[0]];
		for(i=pos;i < pos+T[0];i++)
			S[i]=T[i-pos+1];
		S[0]=MAXSIZE;
		return FALSE;
	}
}



Status StrDelete(String S,int pos,int len)
{
	int i;
	if(pos < 1||pos>S[0]-len+1||len < 0)
		return ERROR;
	for(i=pos+len;i<=S[0];i++)
		S[i-len]=S[i];
	S[0]-=len;
	return OK;
}



Status Replace(String S,String T,String V)
{
	int i=1; 
	if(StrEmpty(T)) 
		return ERROR;
	do
	{
		i=Index(S,T,i); 
		if(i) 
		{
			StrDelete(S,i,StrLength(T)); 
			StrInsert(S,i,V); 
			i+=StrLength(V); 
		}
	}while(i);
	return OK;
}

int main()
{
  int i, j, opp, pos;
  char s, str;
	String t,s1,s2,sub;
	Status k;

  printf("n1.StrAssign 生成串 n2.StrLength 求串长 n3.StrCompare 串比较 ");
  printf("n4.Concat 串连接 n5.SubString 求子串 n6.Index 求子串位置");
  printf("n7.StrInsert 子串插入 n8.StrDelete 子串删除 n9.Replace 子串替换");
  printf("n0.退出 n请选择你的操作:n");
  while(opp != '0')
  {
    scanf("%d",&opp);
    switch(opp)
    {
    case 1:
      k=StrAssign(s1,"nowamagic.net");
      if(!k)
      {
 printf("串长超过MAXSIZE(=%d)n",MAXSIZE);
 exit(0);
      }
      printf("串s1为:");
      StrPrint(s1);
      printf("n");
      break;

    case 2:
      printf("串s1长为%d n",StrLength(s1));
      break;

    case 3:
      k=StrAssign(s2,"google.com");
      if(!k)
      {
 printf("串长超过MAXSIZE(%d)n",MAXSIZE);
 exit(0);
      }
      printf("串s2为:");
      StrPrint(s2);
      printf("n");

      i=StrCompare(s1,s2);
      if(i < 0)
 s=' < ';
      else if(i==0)
 s='=';
      else
 s='>';
      printf("串s1%c串s2n",s);
      break;

    case 4:
      Concat(t,s1,s2);
      StrPrint(t);
      break;

    case 5:
      printf("求串s1的子串,请输入子串的起始位置: ");
      scanf("%d", &i);
      printf("请输入子串的长度: ");
      scanf("%d", &j);
      printf("起始位置:%d,子串长度:%dn", i, j);
      k=SubString(sub,s1,i,j);
      if(k)
      {
 printf("子串sub为: ");
 StrPrint(sub);
      }
      break;

    case 6:
      printf("主串s1为: ");
      StrPrint(s1);
      k=StrAssign(sub,"magic");
      printf("子串sub为: ");
      StrPrint(sub);
      i=Index(s1,sub,1);
      printf("s1的第%d个字母起和sub第一次匹配n",i);
      break;

    case 7:
      printf("主串s1为: ");
      StrPrint(s1);
      k=StrAssign(sub,"lol");
      printf("子串sub为: ");
      StrPrint(sub);
      printf("请输入要插入的位置: ");
      scanf("%d", &pos);
      StrInsert(s1,pos,sub);
      StrPrint(s1);
      break;

    case 8:
      printf("从串s1的第pos个字符起,删除len个字符,请输入pos: n");
      scanf("%d", &i);
      printf("再输入len: n");
      scanf("%d", &j);
      StrDelete(s1,i,j);
      StrPrint(s1);
      break;

    case 9:
      printf("主串s1为: ");
      StrPrint(s1);
      StrAssign(t,"a");
      printf("串t为:");
      StrPrint(t);
      StrAssign(sub,"aa");
      printf("串sub为:");
      StrPrint(sub);
      printf("用串s2取代串s1中和串t相同的不重叠的串后,串s1为: ");
      Replace(s1,t,sub);
      StrPrint(s1);
      break;

    case 0:
      exit(0);
    }
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/63483.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号