1. 程式人生 > >Character string(完整代碼)

Character string(完整代碼)

-s rest ring str find lib size urn define

  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("串空間不足以容納輸入字符串!\n"); 17 } 18 19 while(cts[i] != \0) 20 { 21 s->ch[i]=cts[i]; 22 i++; 23 } 24 s->length=strlen(cts); 25 printf("字符串長度為:%d\n",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]==\0) 35 break; 36 else 37 printf("%c",s.ch[i]); 38 } 39 printf("\n"); 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]=\0; 53 printf("是否連接成功:連接成功!\n"); 54 printf("連接後的字符串如下:\n"); 55 for(i=0;i<s->length;i++) 56 printf("%c",s->ch[i]); 57 printf("\n"); 58 printf("連接後字符串長度為:%d\n",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]=\0; 70 printf("是否連接成功:部分連接成功!\n"); 71 printf("連接後的字符串如下:\n"); 72 for(i=0;i<maxsize;i++) 73 printf("%c",s->ch[i]); 74 printf("\n"); 75 return 1; 76 } 77 else 78 printf("連接失敗,串空間不足以連接!\n"); 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次!\n",i+1,i+2); 92 break; 93 } 94 else 95 continue; 96 } 97 if(j==strlen(p)) 98 { 99 printf("第%d次匹配成功!\n",i+1); 100 printf("該子串在主串的第一個元素的位置為:%d\n",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("字符串比較:前者字符串大於後者字符串!\n"); 118 return 1; 119 } 120 else if(s.ch[i]<t.ch[i]) 121 { 122 printf("字符串比較:前者字符串小於後者字符串!\n"); 123 return -1; 124 } 125 else 126 continue; 127 } 128 if(i==n) 129 printf("字符串比較:兩個字符串相等!\n"); 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個字符的子串如下:\n",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("\n"); 166 comparestring(S,T); 167 168 concat(&S,&T); 169 printstring(S); 170 171 printf("請您在下方輸入當前主串的任意子串,我們接下來將為您進行子串的模式匹配!\n"); 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 }

運行結果如下:

技術分享圖片

Character string(完整代碼)