• Character string


      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<string.h>
      4 #define maxsize 20
      5 typedef struct string{
      6     char ch[maxsize+1];
      7     int length;
      8 }seqString;
      9 
     10 //初始化字符串 
     11 void creatstring(seqString *s,char cts[])
     12  {
     13      int i=0;
     14      if(strlen(cts)>maxsize)
     15     {
     16         printf("串空间不足以容纳输入字符串!
    ");
     17     }
     18 
     19      while(cts[i] != '')
     20      {
     21          s->ch[i]=cts[i];
     22         i++;    
     23     }
     24     s->length=strlen(cts);
     25     printf("字符串长度为:%d
    ",s->length);
     26 }
     27 //打印字符串 
     28 void printstring(seqString s)
     29 {
     30     int i;
     31     printf("当前主串为:");
     32     for(i=0;i<s.length;i++)
     33     {
     34         if(s.ch[i]=='')
     35         break;
     36         else
     37         printf("%c",s.ch[i]);
     38     }
     39     printf("
    ");
     40 }
     41 //连接两个字符串
     42 int concat(seqString *s,seqString *t)
     43 {
     44     int i,m;
     45     if(maxsize>s->length+t->length)
     46     {
     47         for(i=0;i<t->length;i++)
     48         {
     49             s->ch[i+s->length]=t->ch[i]; 
     50         }
     51         s->length=s->length + t->length;
     52         s->ch[s->length]='';
     53         printf("是否连接成功:连接成功!
    ");
     54         printf("连接后的字符串如下:
    ");
     55         for(i=0;i<s->length;i++)
     56             printf("%c",s->ch[i]);
     57             printf("
    ");
     58             printf("连接后字符串长度为:%d
    ",s->length); 
     59         return 1;
     60     }
     61     else if(s->length<maxsize)
     62     {
     63         m=maxsize-s->length;
     64         for(i=0;i<m;i++)
     65         {
     66             s->ch[s->length+i]=t->ch[i];
     67         } 
     68         s->length=maxsize;
     69         s->ch[maxsize]='';
     70         printf("是否连接成功:部分连接成功!
    ");
     71             printf("连接后的字符串如下:
    ");
     72         for(i=0;i<maxsize;i++)
     73             printf("%c",s->ch[i]);
     74         printf("
    ");
     75         return 1;
     76     }
     77     else
     78         printf("连接失败,串空间不足以连接!
    ");
     79         return 0; 
     80 }
     81 //子串的模式匹配
     82 int Find_BF(seqString *s,char p[])
     83 {
     84     int i,j,k;
     85     for(i=0;i<s->length-strlen(p);i++)
     86     {
     87         for(k=i,j=0;j<strlen(p);k++,j++)
     88         {
     89             if(s->ch[k] != p[j])
     90             {
     91                 printf("第%d次匹配失败!尝试第%d次!
    ",i+1,i+2);    
     92                 break;
     93             }
     94             else
     95             continue;
     96         }
     97         if(j==strlen(p))
     98         {
     99             printf("第%d次匹配成功!
    ",i+1);
    100             printf("该子串在主串的第一个元素的位置为:%d
    ",i+1);
    101             return i;
    102         }        
    103     }    
    104 }
    105 //判断两个字符串是否相等
    106 int comparestring(seqString s,seqString t)
    107 {
    108     int i,n;
    109     if(s.length>t.length)
    110         n=s.length;
    111     else
    112         n=t.length;
    113     for(i=0;i<n;i++)
    114     {
    115         if(s.ch[i]>t.ch[i])
    116         {
    117             printf("字符串比较:前者字符串大于后者字符串!
    ");
    118             return 1;
    119         }
    120         else if(s.ch[i]<t.ch[i])
    121         {
    122             printf("字符串比较:前者字符串小于后者字符串!
    ");
    123             return -1;
    124         }
    125         else
    126             continue;            
    127     }
    128     if(i==n)
    129         printf("字符串比较:两个字符串相等!
    ");
    130 }
    131 //求子串
    132 void substring(seqString *s,int x,int y,char b[])
    133 {
    134     int i;
    135     for(i=x-1;i<=y;i++)
    136     {
    137         b[i-x+1]=s->ch[i];    
    138     }
    139     printf("第%d个位置开始的%d个字符的子串如下:
    ",x,y);
    140     printf("%s ",b);    
    141 } 
    142 int main()
    143 {
    144     system("color b1");
    145     int i,n,n1;
    146     int id,longth;
    147     seqString S,T;
    148     
    149     printf("请输入字符串S的字符串长度(<20):");
    150     scanf("%d",&n);
    151     char c[n];
    152     printf("请为字符串S赋值:");
    153     scanf("%s",&c); 
    154     creatstring(&S,c);
    155     printstring(S);
    156     
    157     printf("请输入字符串T的字符串长度(<20):");
    158     scanf("%d",&n1);
    159     char c1[n1];
    160     printf("请为字符串T赋值:");
    161     scanf("%s",&c1);
    162     creatstring(&T,c1);
    163     printstring(T);
    164     
    165     printf("
    ");
    166     comparestring(S,T);
    167     
    168     concat(&S,&T);
    169     printstring(S);
    170     
    171     printf("请您在下方输入当前主串的任意子串,我们接下来将为您进行子串的模式匹配!
    ");
    172     char c2[maxsize];
    173     scanf("%s",&c2);
    174     Find_BF(&S,c2);
    175     
    176     printf("请输入您要从何处开始的位置,以及子串的长度:");
    177     scanf("%d%d",&id,&longth);
    178     char c3[maxsize];
    179     substring(&S,id,longth,c3); 
    180     return 0;
    181  } 
    复制代码

    运行结果如下:

    字符串大小比较的算法如下:

  • 相关阅读:
    HTTP Caching
    有关缓存的那些事 读 PHP高级编程
    用embercli 学习搭建了todoMVC
    redis数据结构开篇
    linux最小安装后进行的操作
    redis数据结构整数集合
    redis数据结构动态字符串(SDS)
    redis数据结构压缩列表
    redis数据结构字典
    redis数据结构跳跃表
  • 原文地址:https://www.cnblogs.com/zhangkaiz/p/10885125.html
Copyright © 2020-2023  润新知