#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define MAXSTRLEN 255
typedef int ElemType;
typedef int Status;
typedef unsigned char SString[MAXSTRLEN+1];
//串赋值操作
Status StrAssign(SString T,char chars[]){
    // 生成一个其值等于chars的串T
    int i;
    if(strlen(chars)>MAXSTRLEN)
        return ERROR;
   
    T[0]=strlen(chars);
    for(i=0;i<=T[0];i++){
        T[i+1]=chars[i];}
    return OK;
}//StrAssign
//输出串
void StrPrint(SString S){
    int i;
   
    for(i=1;i<=S[0];i++){
        printf("%c",S[i]);
    }
    printf("\n");
}//PrnStr
//串复制操作
Status StrCopy(SString T,SString S){
    // 由串S复制得串T
    int i;
    for(i=1;i<=S[0];i++)
        T[i]=S[i];
    T[0]=S[0];
    return OK;
}//StrCopy
//判空操作
Status StrEmpty(SString S){
    if(S[0]==0)
    return OK;
  else
    return ERROR;
}//StrEmpty
//串比较操作
int StrCompare(SString S,SString 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];
}//StrCompare
//求长度操作
int StrLength(SString S){
    return S[0];
}//StrLength
//串连接操作
Status Concat(SString T,SString S1,SString S2){
    int i;
    Status uncut;
    if(S1[0]+S2[0]<=MAXSTRLEN){               
        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];
        uncut=TRUE;
    }
    else if(S1[0]<MAXSTRLEN){
        for(i=1;i<=S1[0];i++){
            T[i]=S1[i];}
        for(i=1;i<=MAXSTRLEN-S1[0];i++){
            T[S1[0]+i]=S2[i];}
        T[0]=MAXSTRLEN;
        uncut=FALSE;
  }
    else{
        for(i=0;i<=MAXSTRLEN;i++){
            T[i]=S1[i];}
        uncut=FALSE;
    }
    return uncut;
}//Concat
//取子串操作
Status SubString(SString Sub,SString 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;
}//SubString
//求子串位置操作
int Index(SString S,SString T,int pos){
  int i,j;
 
  i=pos;
  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];//匹配成功
  return 0;        //匹配失败
}//Index
//串插入操作
Status StrInsert(SString S,int pos,SString T){
    // 初始条件: 串S和T存在,1≤pos≤StrLength(S)+1
    // 操作结果: 在串S的第pos个字符之前插入串T。完全插入返回TRUE,部分插入返回FALSE
    int i;
    if(pos<1||pos>S[0]+1)
        return ERROR;
    if(S[0]+T[0]<=MAXSTRLEN){ // 完全插入
        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=MAXSTRLEN;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]=MAXSTRLEN;
        return FALSE;
    }
}//StrInsert
//串删除操作
Status StrDelete(SString S,int pos,int len){
    // 初始条件: 串S存在,1≤pos≤StrLength(S)-len+1
    // 操作结果: 从串S中删除第pos个字符起长度为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;
}//StrDelete
void main(){
    int pos,len;
    SString S1,S2,S3,T,Sub;
    char a[10],b[10];
    printf("输入两个串分别赋值给S1,S2(串长均小于10):\n");
    scanf("%s%s",a,b);
    if(StrAssign(S1,a)&&StrAssign(S2,b)){
   
        printf("\n由串S1复制得串T:");
字符串长度排序c语言        StrCopy(T,S1);
        //printf("%s\n",S2+1);——错误的!
        StrPrint(T);
        if(StrEmpty(T)==1)
            printf("串T为空!\n");
        else
            printf("串T非空!\n");
        printf("\n比较串S1,S2:\n");
        if(StrCompare(S1,S2)>0)
            printf("S1>S2\n");
        else if(StrCompare(S1,S2)<0)
            printf("S1<S2\n");
        else
            printf("S1=S2\n");
        printf("\n连接串S1,S2得串S3:");
        if(Concat(S3,S1,S2)==1){
            StrPrint(S3);
        }
        else
            printf("串连接失败!");
        printf("串S3的长度为%d:\n",StrLength(S3));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。