其他分享
首页 > 其他分享> > 1945-祖安 say hello-String

1945-祖安 say hello-String

作者:互联网

 1 #define _CRT_SECURE_NO_WARNINGS 1
 2 #include<bits/stdc++.h>
 3 char str[100][40];
 4 char s[1005];
 5 
 6 int remark[2000][2] = { 0 };
 7 /*第一行为一个整数 n,表示违禁词库有 n(1≤n≤100) 个。
 8 第 2 行到第 n+1 行,每行有一个字符串 s (2≤|s|≤30) 表示违禁词,且均为小写字母。
 9 第 n+2 行是一个字符串 t (2≤|t|≤1000),表示Keichi需要发送的信息,也均为小写字母。
10 其中 |s| 表示字符串 s 的长度。*/
11 
12 int main()
13 {
14     int n;
15     scanf("%d", &n);
16     for (int i = 0; i < n; i++) {
17         scanf("%s", str[i]);
18     }//type in banned words
19     scanf("%s", s);//type in a long word jugded
20     int len = strlen(s),k=0;//获得总长度
21 
22 
23     for (int i = 0; i < n; i++) {//对每一个违禁词进行判断
24         int length = strlen(str[i]);//获得违禁词长度
25         int cnt = 0;//初始化已判断过的长度
26         int flag = 1,start=0,end=0;//打星号的标记,若为真一直为1
27         for (int j = 0; j < len;) {//对长串从头到尾进行判断
28          
29                  start = j;//记录开始的位置
30                  while (s[j] == str[i][cnt] && s[j] != '\0' && cnt != length) {
31                      cnt++;
32                      j++;
33                      flag = 1;
34                  }
35     
36                 end = j;//标记结束的位置
37                 if (!cnt || flag) { j=start+1; flag = 0; }
38                 if (cnt < length) { 
39                     end = start;
40                 }
41            
42                 //把那一段划掉
43                 if (end - start > 0) {
44                     remark[k][0] = start;
45                     remark[k][1] = end;
46                     k++;
47                     //printf("[%d,%d]\n", start, end);
48                }//记录所在的区间   
49                 cnt = 0;
50 
51         }
52     }
53     for (int i = 0; i < k; i++) {
54         for (int j = *(*(remark+i)+0); j < *(*(remark + i) + 1); j++) {
55             s[j] ='*';
56         }
57     }
58     printf("%s\n", s);
59     int cnt = 0;
60     for (int i = 0; i < len; i++) {
61         while (s[i] == '*'&&cnt<2) {
62             printf("%c", s[i]);
63             cnt++;
64         }
65         if (s[i] == '*' && cnt == 2) {
66             continue;
67         }
68         printf("%c", s[i]);
69         cnt = 0;
70     }
71     printf("\n");
72     return 0;
73 }

 

标签:cnt,end,String,start,int,祖安,remark,++,say
来源: https://www.cnblogs.com/zrzsblog/p/15669047.html