C语言数据结构之动态分配实现串

来源:爱站网时间:2020-06-04编辑:网友分享
数据算法对我们编程是非常重要的,不管是算法还是大数据出来对编程也有着很重要的意义,这篇文章是爱站技术频道小编为大家带来的C语言数据结构之动态分配实现串,一起进入下文参看吧!

 数据算法对我们编程是非常重要的,不管是算法还是大数据出来对编程也有着很重要的意义,这篇文章是爱站技术频道小编为大家带来的C语言数据结构之动态分配实现串,一起进入下文参看吧!

C语言数据结构之动态分配实现串

说明:堆分配存储实现串时,串并不是以'\0‘, 而是用数据项int length来表示的,所以和传统的c语言操作字符串有所不同。

头文件

#ifndef PILEHEAD_H_INCLUDED
#define PILEHEAD_H_INCLUDED


#include 
#include 


typedef struct
{
  char* ch ;
  int len ;
}HString ;


int StrAssign( HString* pstr , char* pch ) ;
int StrLength( HString* pstr ) ;
int StrCompaer( HString* pstr1 , HString* pstr2 ) ;
int StrClear( HString* pstr ) ;
int StrConcat( HString* pstr , HString str1 , HString str2 ) ;
int StrSub( HString* sub , HString pstr , int pos , int length ) ;
int StrPrint( HString* pstr ) ;


#endif // PILEHEAD_H_INCLUDED

函数实现

#include "pilehead.h"


int StrAssign( HString* pstr , char* pch )
{
  if( !pstr->len )
  {
    free( pstr->ch ) ;
  }
  int i ;
  for( i = 0 ; pch[i] != '\0' ; i++ )
  {
    ;
  }
  if( i == 0 )
  {
    pstr->ch = NULL ;
    pstr->len = 0 ;
  }
  else
  {
    pstr->ch = ( char* )malloc( i * sizeof( char ) ) ;
    pstr->len = i ;
  }
  i = 0 ;
  while( i len )
  {
    pstr->ch[i] = pch[i] ;
    i++ ;
  }
  return 0 ;
}


int StrPrint( HString* pstr )
{
  int i = 0 ;
  while( i len )
  {
    printf( "%c" , pstr->ch[i] ) ;
    i++ ;
  }
  printf( "\n" ) ;
  return 0 ;
}


int StrLength( HString* pstr )
{
  return pstr->len ;
}


int StrCompaer( HString* pstr1 , HString* pstr2 )
{
  int i = 0 ;
  int ret = 0 ;
  while( i len && i len )
  {
    ret = pstr1->ch[i] - pstr2->ch[i] ;
    if( ret  0 )
    {
      return 1 ;
    }
    else
    {
      i++ ;
    }
  }
  int diff = pstr1->len - pstr2->len ;
  if( diff ch )
  {
    free( pstr->ch ) ;
    pstr->ch = NULL ;
  }
  pstr->len = 0 ;
  return 0 ;
}


int StrConcat( HString* pstr , HString str1 , HString str2 )
{


  StrClear( pstr ) ;
  StrAssign( pstr , str1.ch ) ;
  int len = str1.len ;
  int len2 = 0 ;
  while( len2 ch[len++] = str2.ch[len2++] ;
  }
  pstr->len = str1.len + str2.len ;
  return 0 ;
}


int StrSub( HString* sub , HString pstr , int pos , int length )
{
  if( pos  pstr.len || length  pstr.len - pos + 1 )
  {
    printf( "ERROR!\n" ) ;
    exit( 1 ) ;
  }
  StrClear( sub ) ;
  sub->ch = ( char* )malloc( length * sizeof( char ) ) ;
  sub->len = length ;
  int i = 0 ;
  while( i ch[i] = pstr.ch[pos - 1 + i] ;
    i++ ;
  }
  return 0 ;
}

测试函数

#include "pilehead.h"


int main()
{
  HString str ;
  HString str1 ;
  HString str2 ;
  char* pch = "abcd" ;
  StrAssign( &str , pch ) ;
  StrAssign( &str1 , "abcd" ) ;
  StrAssign( &str2 , "fhasdifhos" ) ;
  StrPrint( &str ) ;
  StrPrint( &str1 ) ;
  /*StrClear( &str ) ;
  StrPrint( &str ) ;
  int i = StrCompaer( &str , &str1 ) ;
  printf( "%d" , i ) ;*/
  StrConcat( &str , str1 , str2 ) ;
  StrPrint( &str ) ;
  HString s ;
  StrSub( &s ,str , 4 , 5 ) ;
  StrPrint( &s ) ;
  return 0;
}

如果对C语言数据结构之动态分配实现串还有不了解的地方,欢迎来爱站技术频道查找其他相关知识,希望本文的介绍对大家有所帮助。

上一篇:C语言数据结构之简易计算器

下一篇:C语言数据结构递归之斐波那契数列

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载