OJ 生成一个由各首字母组成的缩写词

本文介绍了一种用于生成英文单词缩写词的算法,该算法可以处理包含空格和连字符的字符串,并能有效忽略特定英文单词如the, a, an等。通过实例演示了算法的具体实现和应用。

描述
给定一个由若干英文单词组成的字符串,生成一个由各首字母组成的缩写词(acronym),其中的the,a,an,of,for及and被忽略。

输入
输入数据有若干行,每行上有一个字符串对应一种情形。字符串中分隔单词的字符有空格或连字符。字符串的长度不超过65536字符。

输出
对于每一种情形,先输出“Case #:”(#为序号,从1起),然后输出结果,换行。

样例输入1
United States of America
PEOPLE’S REPUBLIC OF CHINA
The Asia-Pacific Economic Cooperation
Organization of the Petroleum Exporting Countries
United Nation Educational Scientific and Culture Organization
Universal Serial Bus

样例输出1
Case 1: USA
Case 2: PRC
Case 3: APEC
Case 4: OPEC
Case 5: UNESCO
Case 6: USB

AC代码:

#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;

const int N = 65536;
string str1[N], temp;
char str2[N];

int main()
{
    int i = 0;
    while(getline(cin, temp))
    {
        i ++;       //情形序号递增

        int j, k, l, n = 0;
        stringstream ss;
        ss.str(temp);
        while(ss >> str1[n ++]);
        n --;       //输入的单词个数
        
        for(j = 0, k = 0; j <= n - 1; j ++)
        {
            if(str1[j].length() == 1)
                if(str1[j][0] == 'a' || str1[j][0] == 'A')
                    continue;   //忽略"a"
            if(str1[j].length() == 2)
            {
                if((str1[j][0] == 'a' || str1[j][0] == 'A') && (str1[j][1] == 'n' || str1[j][1] == 'N'))
                    continue;   //忽略"an"
                if((str1[j][0] == 'o' || str1[j][0] == 'O') || (str1[j][1] == 'f' || str1[j][1] == 'F'))
                    continue;   //忽略"of"
            }
            if(str1[j].length() == 3)
            {
                if((str1[j][0] == 'a' || str1[j][0] == 'A') && (str1[j][1] == 'n' || str1[j][1] == 'N') && (str1[j][2] == 'd' || str1[j][2] == 'D'))
                    continue;   //忽略"and"
                if((str1[j][0] == 't' || str1[j][0] == 'T') && (str1[j][1] == 'h' || str1[j][1] == 'H') && (str1[j][2] == 'e' || str1[j][2] == 'E'))
                    continue;   //忽略"the"
                if((str1[j][0] == 'f' || str1[j][0] == 'F') && (str1[j][1] == 'o' || str1[j][1] == 'O') && (str1[j][2] == 'r' || str1[j][2] == 'R'))
                    continue;   //忽略"for"
            }
            str2[k++] = str1[j][0]; //将每个单词首字母提取出来
            for(l = 0; l <= str1[j].length(); l ++)
                if(str1[j][l] == '-')
                    str2[k++] = str1[j][l+1];   //将连字符'-'后的首字母提取出来
        }
        cout << "Case " << i << ": " << str2 << endl;
        memset(str2, '\0', N);  //一种情形结束初始化str2
    }
    return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hibiki.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值