顺序串操作
定义一个顺序串
# define MAXSIZE 100
typedef struct string {
char str[ MAXSIZE] ;
int length;
} seqstring;
主函数的创建
seqstring S, T, * p, * q;
int i, j, len;
printf ( "1 is:" ) ;
scanf ( "%s" , S. str) ;
printf ( "2 is:" ) ;
scanf ( "%s" , T. str) ;
S. length = strlen ( S. str) ;
T. length = strlen ( T. str) ;
将字符串T内容插入到字符串S的指定位置i上,位置从1开始。
void strinsert ( seqstring* S, int i, seqstring T)
{
int k;
if ( i< 1 || i> S-> length + 1 || S-> length + T. length > MAXSIZE - 1 )
printf ( "connot insert\n" ) ;
else
{
printf ( "\n" ) ;
for ( k = S-> length - 1 ; k >= i - 1 ; k-- )
{
S-> str[ T. length + k] = S-> str[ k] ;
}
printf ( "\n" ) ;
for ( k = 0 ; k < T. length; k++ )
{
S-> str[ i + k - 1 ] = T. str[ k] ;
}
S-> length = S-> length + T. length;
S-> str[ S-> length] = '\0' ;
}
}
删除字符串指定位置和指定位置后的字符个数
void strdelete ( seqstring* S, int i, int len)
{
int k;
if ( i< 1 || i> S-> length || i + len - 1 > S-> length) printf ( " cannot delete\n" ) ;
else
{
for ( k = i + len - 1 ; k < S-> length; k++ )
{
S-> str[ k - len] = S-> str[ k] ;
}
S-> length = S-> length - len;
S-> str[ S-> length] = '\0' ;
}
}
连接运算,将S2连到S1的后面
seqstring* strconcat ( seqstring S1, seqstring S2)
{
int i;
seqstring* r;
if ( S1. length + S2. length > MAXSIZE - 1 ) {
printf ( "cannot concate" ) ;
return ( NULL ) ;
}
else
{
r = ( seqstring* ) malloc ( sizeof ( seqstring) ) ;
for ( i = 0 ; i < S1. length; i++ ) r-> str[ i] = S1. str[ i] ;
for ( i = 0 ; i < S2. length; i++ ) r-> str[ S1. length + i] = S2. str[ i] ;
r-> length = S1. length + S2. length;
r-> str[ r-> length] = '\0' ;
}
return ( r) ;
}
求子串,在字符串S中提取从i位置开始的len个字符
seqstring* substring ( seqstring S, int i, int len)
{
int k;
seqstring* r;
if ( i< 1 || i> S. length || i + len - 1 > S. length)
{
printf ( "error\n" ) ;
return ( NULL ) ;
}
else
{
r = ( seqstring* ) malloc ( sizeof ( seqstring) ) ;
for ( k = 0 ; k < len; k++ ) {
r-> str[ k] = S. str[ i + k - 1 ] ;
printf ( "%d--%d," , i + k - 1 , k) ;
}
r-> length = len;
r-> str[ r-> length] = '\0' ;
}
return ( r) ;
}