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;
}

猜你喜欢

转载自www.cnblogs.com/ocac/p/11113415.html