OCAC暑期比赛第一场 A题 好长好长的字符串 题解

Posted ocac

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OCAC暑期比赛第一场 A题 好长好长的字符串 题解相关的知识,希望对你有一定的参考价值。

好长好长的字符串
原题链接:http://codeforces.com/problemset/problem/71/A
【题目描述】
好长好长的字符串是像  "localization" 或者 "internationalization" 这样的字符串,这些字符串包含很多单词,所以你在抄写这些单词的时候很费力。
我们定义一个字符串为 好长好长的字符串,当且仅当该字符串的长度大于 10。
我们现在在对单词进行简化,所以所有的好长好长的字符串都需要被简化。
我们的简化操作如下:对于一个字符串 s ,如果它是好长好长的字符串(长度超过10),那么我们将其转换为三部分的拼接:
第一部分是 s 的首字母;
第二部分是 s 中取出首字母和尾字母之后剩下的元素的个数;
第三部分是 s 的尾字母。
比如,对于一个字符串 "localization" 来说,它的长度为 12,超过了10,所以它是一个好长好长的字符串。对它进行简化操作后的结果为 "l10n"。
对  "internationalization" 进行简化后的操作为 "i18n"
而对 "jinitaimei" 进行简化操作后的结果还是它本身 —— "jinitaimei" ,因为这个单词中的元素个数没有超过 10。
现在给你一个若干个单词,你需要一次输出每一个单词简化后的结果。
【输入格式】
输入的第一行包含一个整数 n (1<=n<=100),用于表示你需要处理的单词个数。
接下来的 n 行,每行包含一个字符串 s (s 的长度在 1 到 100 之间)。
【输出格式】
输出 n 行,每行对应输入中的单词简化后的结果。
【样例输入】
4
word
localization
internationalization
pneumonoultramicroscopicsilicovolcanoconiosis
【样例输出】
word
l10n
i18n
p43s
【问题分析】
对于每一个字符串 s ,假设它的长度为 n, 如果它的长度<=10,我们原样输出;否则,我们只需要输出 s[0] + (n-2) + s[n-1] 就可以了。
使用 char 数组实现的代码如下:

#include <bits/stdc++.h>
using namespace std;

char ch[110];
int n, m;

int main() 
    cin >> n;
    while (n --) 
        cin >> ch; m = strlen(ch);
        if (m <= 10) cout << ch << endl;
        else cout << ch[0] << m - 2 << ch[m-1] << endl;
    
    return 0;

 使用 string 实现的代码如下:

#include <bits/stdc++.h>
using namespace std;

string s;
int n, m;

int main() 
    cin >> n;
    while (n --) 
        cin >> s; m = s.length();
        if (m <= 10) cout << s << endl;
        else cout << s[0] << m - 2 << s[m-1] << endl;
    
    return 0;

 

以上是关于OCAC暑期比赛第一场 A题 好长好长的字符串 题解的主要内容,如果未能解决你的问题,请参考以下文章

OCAC暑期比赛第一场 F题 字符串加密 题解

OCAC暑期比赛第一场 B题 字符串任务 题解

OCAC暑期比赛第一场 H题 聊天室 题解

OCAC暑期比赛第一场 D题 足球比赛中的危险状态 题解

OCAC暑期比赛第一场 J题 星球语言的翻译 题解

OCAC暑期比赛第一场 E题 有用的数学 题解