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

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:4276

解决:1699

题目描述:

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

输入:

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

输出:

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

样例输入:
in
#include 
int main()
{

printf(" Hi ");
}
样例输出:
#clude
tma()
{

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
****************************************************************/


你可能感兴趣的:(查找,C语言,OJ,九度)