1945-祖安say|1945-祖安say hello-string

1945-祖安say|1945-祖安say hello-string
文章图片


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

【1945-祖安say|1945-祖安say hello-string】

    推荐阅读