九度oj-1049

题目描述:

输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果。

输入:

测试数据有多组,每组输入字符串s和字符c。

输出:

对于每组输入,输出去除c字符后的结果。

样例输入:

heallo
a

样例输出:

hello

代码一

#include <stdio.h>
#include <string.h>

int main()
{
        char str[1000000],ch,ch1;
        int len,i;
        while (gets(str))
        {
                scanf("%c",&ch);
                len = strlen(str);
                for (i=0;i<len;i++)
                {
                        if (str[i] != ch)
                                printf("%c",str[i]);
                }
                printf("\n");
                ch1 = getchar();
        }
        return 0;
}

代码二

#include<stdio.h>

int  main()
{
    char a[1000000],ch;
    int i;
    scanf("%s",a);
    getchar();
    while(scanf("%c",&ch)!=EOF)
    {
        getchar();
        for(i=0;a[i]!='\0';i++)
        {
            if(a[i]!=ch) printf("%c",a[i]);
        }
        printf("\n");

        scanf("%s",a);
        getchar();
    }
    return 0;
}

作者提醒

关于算法:投机取巧的做法是直接判断每一个字符是否题目不给输出的字符然后判断是否输出该字符。

关于输入输出格式的说明:

gets()是输入一整行。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,
并由此来结束字符串。

scanf()利用%s是输入遇到空白符(空格、Tab或回车)时截止。

在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。

例如:
scanf("%c%c%c",&a,&b,&c);
输入为:d e f
则把'd'赋予a, ' (空格)'赋予b,'e'赋予c。因为%c 只要求读入一个字符,
后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。
只有当输入为:def 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。 
如果在格式控制中加入空格作为间隔,
如
scanf("%c %c %c",&a,&b,&c);
则输入时各数据之间可加空格。
如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
用%s来输入字符串的话,不接受回车符。

然后呢,这个题目就要慢慢试试看到底是字符串和字符同一行呢还是分作两行。
另外,再试试看输出时每一组之间要不要回车。麻烦吧……