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