zoukankan      html  css  js  c++  java
  • 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  } 
    复制代码

    运行结果如下:

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

  • 相关阅读:
    PAT 1006 Sign In and Sign Out
    PAT 1004. Counting Leaves
    JavaEE开发环境安装
    NoSql数据库探讨
    maven的配置
    VMWARE 下使用 32位 Ubuntu Linux ,不能给它分配超过3.5G 内存?
    XCODE 4.3 WITH NO GCC?
    在苹果虚拟机上跑 ROR —— Ruby on Rails On Vmware OSX 10.7.3
    推荐一首让人疯狂的好歌《Pumped Up Kicks》。好吧,顺便测下博客园可以写点无关技术的帖子吗?
    RUBY元编程学习之”编写你的第一种领域专属语言“
  • 原文地址:https://www.cnblogs.com/zhangkaiz/p/10885125.html
Copyright © 2011-2022 走看看