[HihoCoder]#1082 : 然而沼跃鱼早就看穿了一切

华电北风吹
2017-02-23

题目链接:
http://hihocoder.com/problemset/problem/1082

题目分析:
本来以为要划分出单词判断的,没想到想多了。

参考代码:

#include <iostream>
#include <string.h>
using namespace std;

char input[205];
char s1[10] = "marshtomp";
char s2[10] = "fjxmlhx";

int main()
{
    string s;
    int ls1 = strlen(s1);
    int ls2 = strlen(s2);
    while (cin.getline(input, 205))
    {
        int len = strlen(input);

        int start = 0, p = 0;
        while (start <= len)
        {
            int i = 0;
            for (; i < ls1; i++)
            {
                if ((input[start + i] != s1[i]) && (input[start + i] != s1[i] - 32))
                    break;
            }
            if (i == ls1)
            {
                for (int k = 0; k < ls2; k++)
                {
                    input[p + k] = s2[k];
                }
                start += ls1;
                p += ls2;
            }
            else
            {
                input[p] = input[start];
                p++;
                start++;
            }
        }
        printf("%s\n", input);
    }
    return 0;
}

下面的虽然是错误代码,但是划分的思路还是很好的,也保存一下。

#include <iostream>
#include <string.h>
using namespace std;

char input[205];
char output[205];
char s1[10] = "marshtomp";
char s2[10] = "fjxmlhx";

bool CheckWord(int start, int end)
{
    if ((end - start) != 8)
    {
        return false;
    }
    for (int i = 0; i < 9; i++)
    {
        if ((input[start + i] != s1[i]) && (input[start + i] != s1[i] - 32))
            return false;
    }
    return true;
}

bool isalphabet(int num)
{
    if ((num >= 'a') && (num <= 'z'))
    {
        return true;
    }
    if ((num >= 'A') && (num <= 'Z'))
    {
        return true;
    }
    return false;
}

int main()
{
    string s;
    while (cin.getline(input, 205))
    {
        int len = strlen(input);
        int start = 0, end = 0, position = 0;
        while (start <= len)
        {
            while ((isalphabet(input[start]) == false) && (start <= len))
            {
                output[position] = input[start];
                position++;
                start++;
            }
            if (start >= len)
                break;
            end = start + 1;
            while ((isalphabet(input[end]) == true) && (end < len))
            {
                end++;
            }
            if (isalphabet(input[end]) == false)
                end--;
            if (CheckWord(start, end))
            {
                for (int i = 0; i < 7; i++)
                {
                    output[position] = s2[i];
                    position++;
                }
            }
            else
            {
                for (int i = start; i <= end; i++)
                {
                    output[position] = input[i];
                    position++;
                }
            }
            start = end + 1;
        }
        printf("%s\n", output);
    }
    return 0;
}

毕业后很久没写代码了,写的第一道题目,拿个简单的练练手,但是没想到题目理解错了浪费了好久。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值