九度OJ 1168:字符串的查找删除 (查找)

来源:互联网 发布:caffe bene菜单 编辑:程序博客网 时间:2024/05/17 16:16

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:4276

解决:1699

题目描述:

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。

输入:

输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。

输出:

删除输入的短字符串(不区分大小写)并去掉空格,输出。

样例输入:
in#include int main(){printf(" Hi ");}
样例输出:
#cludetma(){prtf("Hi");}
提示:

注:将字符串中的In、IN、iN、in删除。

来源:
2009年北京航空航天大学计算机研究生机试真题

思路:

含空格的输入可以用gets函数。


代码:

#include <stdio.h>#include <string.h> #define M 100 int match(char c1, char c2){    if ('A' <= c1 && c1 <= 'Z')        c1 += 'a'-'A';    if ('A' <= c2 && c2 <= 'Z')        c2 += 'a'-'A';    return (c1 == c2);} void delete(char *s, int len){    int i;    for (i=0; i<strlen(s)-len; i++)        s[i] = s[i+len];    s[i] = '\0';} int main(void){    int j, k, m;    int matched;    char s[M], mod[M];     //scanf("%s", mod);    gets(mod);    while (gets(s))    {        for (j=0; j<strlen(s); j++)        {            if (s[j] == mod[0])            {                matched = 1;                for (m=j, k=0; m<strlen(s) && k<strlen(mod); m++, k++)                {                    if (! match(s[m], mod[k]))                    {                        matched = 0;                        break;                    }                }                if (m == strlen(s) && k<strlen(mod))                    matched = 0;                if (matched == 1)                    delete(s+j, strlen(mod));            }            else if (s[j] == ' ')                delete(s+j, 1);        }        printf("%s\n", s);    }     return 0;}/**************************************************************    Problem: 1168    User: liangrx06    Language: C    Result: Accepted    Time:0 ms    Memory:912 kb****************************************************************/


0 0