데이터 구조 - 문자열 의 정의, 저장 구조 와 기본 작업

18893 단어 데이터 구조
문자열 정의
  • 문자열 은 0 개 또는 여러 문자 로 구 성 된 유한 한 서열 이다.문자열 에 있 는 문자 의 개 수 는 문자열 의 길이 라 고 하고 0 개의 요 소 를 포함 한 문자열 은 빈 문자열
  • 이 라 고 합 니 다.
  • 문자열 에서 임의의 연속 문자 로 구 성 된 하위 서열 을 이 문자열 의 문자열 이 라 고 부 르 고 문자열 을 포함 하 는 문자열 을 주 문자열 이 라 고 부 르 며 특정한 문자 가 문자열 에 있 는 번 호 를 이 문자 의 위치
  • 라 고 부른다.
  • 문자열 은 요 소 를 문자 로 제한 하 는 선형 표
  • 이다.
    직렬 저장 구조
    고정 순차 저장:
    //       
    typedef struct 
    {
    	char str[maxSize+1];	//       maxSize,           '\0'      
    	int length;
    }Str;
    

    길이 변환 할당 저장 소:
    //       
    typedef struct 
    {
    	char *ch;	//                 
    	int length;
    }Str;
    

    문자열 의 기본 동작
    할당 조작
    //     :           str,        1,    0
    int strCopy(Str &str,char *ch)
    {
    	if(str.ch)
    		free(str.ch);	//   str   ,       (  )
    	int len=0;
    	char *c=ch;	//       c    ch
    	while(*c)	//      ,      
    	{
    		c++;
    		len++;
    	}
    	if(len==0)
    	{
    		str.ch=NULL;
    		str.length=0;
    		return 1;
    	}
    	else{
    		str.ch=(char*)malloc(sizeof(char)*(len+1));	//          '\0'
    		if(str.ch==NULL)
    			return 0;
    		else{
    			c=ch;
    			int i=0;
    			for(i=0;i<=len;i++)
    			{
    				str.ch[i]=*c;
    				c++;
    			}
    			str.length=len;
    			return 1;
    		}
    	}
    }
    

    문자열 길이 가 져 오기
    //       
    int strLength(Str str)
    {
    	return str.length;
    }
    

    직렬 비교 조작
    //      
    int strCompare(Str s1,Str s2)
    {
    	int i=0;
    	for(i=0;i<s1.length&&i<s2.length;i++)
    	{
    		if(s1.ch[i]!=s2.ch[i])	//           ,        
    			return s1.ch[i]-s2.ch[i];
    	}
    	return s1.length-s2.length;	//       ,              ,    
    }
    

    직렬 연결 조작
    // 	     
    Str strConcat(Str s1,Str s2)
    {
    	Str str;
    	str.ch=(char *)malloc(sizeof(char)*(s1.length+s2.length+1));
    	str.length=s1.length+s2.length;
    	int i=0;
    	for(i=0;i<s1.length;i++)
    	{
    		str.ch[i]=s1.ch[i];
    	}
    	int j=0;
    	for(j=0;j<=s2.length;j++)	//   s2.ch    '\0'    
    	{
    		str.ch[j]=s1.ch[j];
    	}
    	return str;
    }
    

    직렬 비우 기 동작
    //      
    int strClean(Str &s1)
    {
    	if(s1.ch)
    	{
    		free(s1.ch);
    		str.ch=NULL;
    	}
    	str.length=0;
    	return 1;
    }
    

    서브 스 트 링 조작
    //      : s1 pos    ,   len   
    Str subString(Str s1,int pos,int len)
    {
    	if(pos<0||len<0||pos>=s1.length||len>str.length-pos)	//         
    		return 0;
    	Str str;
    	if(len==0)
    	{
    		str.ch=NULL;
    		str.length=0
    		return 1;
    	}
    	else
    	{
    		str.ch=(char*)malloc(sizeof(char)*(len+1));
    		int i=0;
    		for(i=0;i<len;i++)
    		{
    			str.ch[i]=s1.ch[i+pos];
    		}
    		str.ch[i]='\0';
    		str.length=0;
    		return 1;
    	}
    }
    

    좋은 웹페이지 즐겨찾기